Comment on page
Basic Functionality
Before starting with the ORM, it is highly recommended to familiar one's self with
package:angel3_serialize
, as it is the foundation for package:angel3_orm
:To enable the ORM for a given model, simply add the
@orm
annotation to its definition:@orm
@serializable
abstract class _Todo {
bool get isComplete;
String get text;
@Column(type: ColumnType.long)
int get score;
}
The generator will produce a
TodoQuery
class, which contains fields corresponding to each field declared in _Todo
. Each of TodoQuery
's fields is a subclass of SqlExpressionBuilder
, corresponding to the given type. For example, TodoQuery
would look something like:class TodoQuery extends Query<Todo, TodoQueryWhere> {
BooleanSqlExpressionBuilder get isComplete;
StringSqlExpressionBuilder get text;
NumericSqlExpressionBuilder<int> get score;
}
Thus, you can query the database using plain-old-Dart-objects (PODO's):
Future<List<Todo>> leftToDo(QueryExecutor executor) async {
var query = TodoQuery()..where.isComplete.isFalse;
return await query.get(executor);
}
Future<void> markAsComplete(Todo todo, QueryExecutor executor) async {
var query = TodoQuery()
..where.id.equals(todo.idAsInt)
..values.isComplete = true;
await query.updateOne(executor);
}
The glue holding everything together is the
QueryExecutor
interface. To support the ORM for any arbitrary database, simply extend the class and implement its abstract methods.app.container.registerSingleton<QueryExecutor>(PostgresExecutor(...));
At the time of this writing, there is only support for PostgreSQL, though more databases may be added eventually.
Last modified 1yr ago