📜  moor 检查是否为空 (1)

📅  最后修改于: 2023-12-03 15:03:02.688000             🧑  作者: Mango

检查是否为空 - Moor

介绍

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的空检查

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.