Flutter持久化库drift(原moor)官方文档翻译汇总 - 掘金 (juejin.cn)
本文翻译自 drift 的 官方文档 DAOs (simonbinder.eu)。
肉翻多有不足,不吝赐教。
DAO
用 DAO 保持你的数据库代码模块化
如果有很多的查询,把它们都放进一个类里会变得冗长。 可以把一些查询抽取出来放进类中,从数据库类里可以使用它们。 考虑下以下代码:
part 'todos_dao.g.dart';
// _TodosDaoMixin 会被 drift 创建。
// 它包含表需要的所有必要字段。
// <MyDatabase> 类型注释是数据库类,会使用这个 DAO。
@DriftAccessor(tables: [Todos])
class TodosDao extends DatabaseAccessor<MyDatabase> with _$TodosDaoMixin {
// 构造方法是必需的,这样主数据库可以创建这个对象的实例。
TodosDao(MyDatabase db) : super(db);
Stream<List<TodoEntry>> todosInCategory(Category category) {
if (category == null) {
return (select(todos)..where((t) => isNull(t.category))).watch();
} else {
return (select(todos)..where((t) => t.category.equals(category.id)))
.watch();
}
}
}
如果现在将 MyDatabase
类的注解改为 @DriftDatabase(tables: [Todos, Categories], daos: [TodosDao])
, 然后重新运行代码生成,生成的 getter todosDao
会用来访问这个 DAO 的实例。