Flutter数据库生成插件nitrite_generator的使用

Flutter数据库生成插件nitrite_generator的使用

Nitrite Generator 是一个用于 Nitrite 数据库的代码生成器。它使用 source_gen 包来生成代码。要使用生成器,请将以下包添加到您的项目中:

dart pub add nitrite_generator --dev
dart pub add build_runner --dev

更多详细信息请参阅 Nitrite 文档

示例代码

以下是一个完整的示例代码,展示了如何使用 Nitrite Generator 生成数据库实体类。

文件结构

- example/
  - example.dart
  - example.no2.dart

example.dart

import 'package:nitrite/nitrite.dart';

part 'example.no2.dart'; // 自动生成的文件

// 定义一个可转换的实体类
@Convertable(className: 'MyBookConverter')
@Entity(name: 'books', indices: [
  Index(fields: ['tags'], type: IndexType.nonUnique), // 非唯一索引
  Index(fields: ['description'], type: IndexType.fullText), // 全文索引
  Index(fields: ['price', 'publisher']), // 复合索引
])
class Book with _$BookEntityMixin {
  // 主键字段
  @Id(fieldName: 'book_id', embeddedFields: ['isbn', 'book_name'])
  @DocumentKey(alias: 'book_id') // 设置别名
  BookId? bookId;

  String? publisher;
  double? price;
  List<String> tags = []; // 标签列表
  String? description;

  // 构造函数
  Book([
    this.bookId,
    this.publisher,
    this.price,
    this.tags = const [],
    this.description,
  ]);
}

// 复合主键类
@Convertable() // 可转换标记
class BookId {
  String? isbn;

  // 设置不同的字段名称在文档中
  @DocumentKey(alias: "book_name") // 设置别名
  String? name;

  // 忽略该字段
  @IgnoredKey() // 忽略标记
  String? author;
}

自动生成的文件 example.no2.dart

// 自动生成的文件,无需手动编辑
import 'package:nitrite/nitrite.dart';

// 自动生成的 Book 类
class _$BookEntityMixin {}

// 自动生成的 BookId 类
class _$BookIdEntityMixin {}

使用自动生成的代码

import 'package:nitrite/nitrite.dart';
import 'example.dart';

void main() async {
  // 创建一个内存数据库
  var db = await Nitrite.builder().memory().open();

  // 插入数据
  var book = Book(
    BookId(isbn: '1234567890', name: 'Dart Programming'),
    'ABC Publisher',
    29.99,
    ['Programming', 'Dart'],
    'A comprehensive guide to Dart programming.'
  );

  var bookRepository = db.getRepository<Book>();
  await bookRepository.insert(book);

  // 查询数据
  var books = await bookRepository.find();
  for (var b in books) {
    print('Book ID: ${b.bookId?.name}, Price: ${b.price}');
  }

  // 关闭数据库连接
  await db.close();
}

通过上述步骤,您可以使用 Nitrite Generator 自动生成数据库实体类,并进行基本的增删改查操作。


更多关于Flutter数据库生成插件nitrite_generator的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter数据库生成插件nitrite_generator的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


nitrite_generator 是一个用于生成 Nitrite 数据库模型和访问代码的 Flutter 插件。Nitrite 是一个嵌入式的 NoSQL 数据库,适用于 Flutter 和 Dart 应用程序。nitrite_generator 可以帮助开发者自动生成与 Nitrite 数据库交互的代码,从而减少手动编写模型和数据库访问代码的工作量。

安装 nitrite_generator

首先,你需要在 pubspec.yaml 文件中添加 nitrite_generatorbuild_runner 依赖:

dependencies:
  nitrite: ^latest_version

dev_dependencies:
  nitrite_generator: ^latest_version
  build_runner: ^latest_version

然后运行 flutter pub get 来安装依赖。

创建模型类

接下来,你需要创建一个 Dart 类来表示你的数据库模型。使用 @NitriteEntity 注解来标记这个类,并使用 @NitriteId 注解来标记主键字段。

import 'package:nitrite/nitrite.dart';
import 'package:nitrite_annotations/nitrite_annotations.dart';

@NitriteEntity()
class User {
  @NitriteId()
  final String id;

  final String name;
  final int age;

  User({required this.id, required this.name, required this.age});
}

生成代码

使用 build_runner 来生成 Nitrite 数据库的访问代码。在终端中运行以下命令:

flutter pub run build_runner build

这将会生成一个与 User 类对应的 UserRepository 类,用于与 Nitrite 数据库进行交互。

使用生成的代码

你可以使用生成的 UserRepository 类来执行数据库操作。以下是一个简单的示例:

import 'package:nitrite/nitrite.dart';
import 'user.dart'; // 你的模型类
import 'user_repository.dart'; // 生成的代码

void main() async {
  final nitrite = await Nitrite.builder()
      .openOrCreate();

  final userRepository = UserRepository(nitrite);

  // 插入用户
  final user = User(id: '1', name: 'John Doe', age: 30);
  await userRepository.insert(user);

  // 查询用户
  final users = await userRepository.find();
  print(users);

  // 更新用户
  final updatedUser = User(id: '1', name: 'John Doe', age: 31);
  await userRepository.update(updatedUser);

  // 删除用户
  await userRepository.delete('1');

  // 关闭数据库
  await nitrite.close();
}
回到顶部