📅  最后修改于: 2023-12-03 15:03:02.688000             🧑  作者: Mango
Moor是一个用Dart编写的过程化数据存储库。它易于使用,支持类型安全的Sql语句,并提供了强大的查询功能。
在Moor中,我们可以通过添加注释来自动生成代码。根据表中列的注释,Moor将自动为您生成适当的字段(实例变量)和访问器方法。Moors许多功能包括自动生成模型,事务和多表连接。
在这里,我们将讨论检查Null或Empty或WhiteSpace的方法。
Moor的Checked Mode内置了对空和空字符串的类型检查。然而,我们也可以在运行时执行空检查,以下是一个示例:
if (myString?.isEmpty ?? true) {
// the string is either null, empty or whitespace
}
请注意,我们必须使用'??'而不是'-'来测试该字符串是否为空。如果使用'-',则会生成错误,导致编译器不会警告我们:
if (myString.isEmpty) { // error: null-aware operation on non-null value
// we might be accessing the string after all 🤕
}
在上面的示例中,如果'?'不为空,则将调用isEmpty方法。否则,它将返回true,在这种情况下,我们将在条件中执行代码块。
Moor还提供了许多内置的辅助程序,您可以使用这些辅助程序来执行此操作。例如,我们可以在检查期间使用非空行检查,它们可以接受实现TypeSafeDataClass的普通Dart对象。
class MyDataClass extends DataClass {
final int id;
MyDataClass({required this.id});
@override
List<Object?> get props => [id];
}
extension NonNullableStringX on String {
bool get isPresent => !isNullOrWhiteSpace;
bool get isNullOrWhiteSpace {
return this == null || this.trim().isEmpty;
}
}
extension NonNullableDataClassX<T extends DataClass> on T? {
bool get isPresent => this != null;
}
在上面的示例中,我们扩展了String和DataClass,将isPresent方法添加到我们的模型中。
最后,我们可以在查询中使用这些辅助程序,例如:
final entry = (select(db.entries)..where((entry) {
return entry.title.equals(title) &
entry.text.equals(text) &
entry.author.equals(authorName) & // Expression<bool, BoolType>
entry.reviewedBy.isPresent & // Expression<bool, BoolType>
entry.reviewedBy.equals(reviewer.email); // Expression<bool, BoolType>
})).getSingleOrNull();
在上面的示例中,我们使用isPresent检查表条目中的reviewedBy属性是否为空。如果tryAccessReviewBy该值为空,Moor将仅仅忽略此查询条目。
Moor是一个易于使用和功能强大的过程化数据存储库,它支持类型安全化的SQL语句和强大的查询功能。您可以使用内置的空检查工具来轻松地查找null,empty和white spaces.