Flutter ORM框架插件conduit_orm的使用

Flutter ORM框架插件conduit_orm的使用

在Flutter应用开发中,处理数据库操作是一个常见的需求。conduit_orm 是一个用于Dart语言的独立ORM(对象关系映射)库,支持多种数据库实现。原本集成在Conduit项目(以前称为aqueduct)中的 conduit_orm 现在已经成为一个独立的ORM,适用于任何Dart应用。

安装

首先,在你的 pubspec.yaml 文件中添加对 conduit_orm 的依赖:

dependencies:
  conduit_orm: ^0.1.0

然后运行 flutter pub get 来获取该依赖。

基本使用

创建实体类

在使用 conduit_orm 之前,我们需要定义数据模型。这可以通过创建一个实体类来完成。例如,我们创建一个名为 User 的实体类,表示用户信息。

import 'package:conduit_orm/conduit_orm.dart';

class User extends ManagedObject<_User> implements _User {}

class _User {
  @primaryKey
  int? id;

  String? name;

  String? email;
}

在这个例子中,User 类继承自 ManagedObject<_User>,而 _User 类则包含了实际的数据属性。@primaryKey 注解标记了 id 字段作为主键。

连接数据库

接下来,我们需要连接到数据库。这里以 SQLite 数据库为例进行说明。

import 'package:sqlite3/open.dart';
import 'package:conduit_orm/conduit_orm.dart';
import 'package:path/path.dart' as p;
import 'package:sqlite3/sqlite3.dart';

void main() async {
  // 初始化SQLite数据库
  final dbPath = p.join('.data', 'mydatabase.db');
  open.overrideFor(OperatingSystem.linux, path: 'lib/mydatabase.db.so');
  var db = sqlite3.open(dbPath);

  // 创建表
  var schema = Schema.fromEntities([User]);
  await db.execute(schema.createTableScript(User));

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

上述代码中,我们首先初始化了一个 SQLite 数据库,并指定了数据库文件的路径。然后通过 Schema.fromEntities 方法生成了数据库表的创建脚本,并执行了该脚本。

插入数据

插入数据时,可以使用 DatabaseContext 类来进行操作。

void main() async {
  // 初始化SQLite数据库
  final dbPath = p.join('.data', 'mydatabase.db');
  open.overrideFor(OperatingSystem.linux, path: 'lib/mydatabase.db.so');
  var db = sqlite3.open(dbPath);
  
  // 创建表
  var schema = Schema.fromEntities([User]);
  await db.execute(schema.createTableScript(User));

  // 创建数据库上下文
  var context = DatabaseContext(db);

  // 创建一个用户实例
  var user = User()
    ..name = "张三"
    ..email = "zhangsan@example.com";

  // 插入数据
  await context.insert(user);

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

查询数据

查询数据可以通过 DatabaseContext 类提供的方法来实现。

void main() async {
  // 初始化SQLite数据库
  final dbPath = p.join('.data', 'mydatabase.db');
  open.overrideFor(OperatingSystem.linux, path: 'lib/mydatabase.db.so');
  var db = sqlite3.open(dbPath);
  
  // 创建表
  var schema = Schema.fromEntities([User]);
  await db.execute(schema.createTableScript(User));

  // 创建数据库上下文
  var context = DatabaseContext(db);

  // 查询所有用户
  var users = await context.fetch<User>();

  // 打印结果
  for (var user in users) {
    print("用户名: ${user.name}, 邮箱: ${user.email}");
  }

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

更多关于Flutter ORM框架插件conduit_orm的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter ORM框架插件conduit_orm的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


conduit_orm 是一个用于 Dart 和 Flutter 的 ORM(对象关系映射)框架,它允许开发者通过 Dart 类来操作数据库。conduit_ormConduit 框架的一部分,Conduit 是一个用于构建 RESTful API 的 Dart 框架。conduit_orm 提供了一种简单的方式来管理数据库表和它们之间的关系。

以下是如何在 Flutter 项目中使用 conduit_orm 的基本步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  conduit_orm: ^3.0.0

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

2. 配置数据库连接

在使用 conduit_orm 之前,你需要配置数据库连接。通常,你会在 main.dart 或一个单独的文件中进行配置。

import 'package:conduit_orm/conduit_orm.dart';

void main() async {
  final context = ManagedContext(
    PersistentStore(
      "postgres",
      database: "your_database_name",
      username: "your_username",
      password: "your_password",
      host: "your_host",
      port: 5432,
    ),
  );

  // 其他初始化代码
}

3. 定义模型类

conduit_orm 使用 Dart 类来表示数据库表。你需要为每个表创建一个类,并使用注解来定义表的结构。

import 'package:conduit_orm/conduit_orm.dart';

class User extends ManagedObject<_User> implements _User {}

class _User {
  [@primaryKey](/user/primaryKey)
  int id;

  [@Column](/user/Column)(unique: true)
  String username;

  [@Column](/user/Column)()
  String password;

  [@Column](/user/Column)()
  DateTime createdAt;
}

4. 创建数据库表

在第一次运行时,你可能需要创建数据库表。你可以使用 conduit_orm 提供的命令行工具或手动执行 SQL 语句。

void main() async {
  final context = ManagedContext(
    PersistentStore(
      "postgres",
      database: "your_database_name",
      username: "your_username",
      password: "your_password",
      host: "your_host",
      port: 5432,
    ),
  );

  final schema = Schema.fromContext(context);
  await schema.create();
}

5. 操作数据库

你可以使用 ManagedContext 来执行数据库操作,如插入、查询、更新和删除。

void main() async {
  final context = ManagedContext(
    PersistentStore(
      "postgres",
      database: "your_database_name",
      username: "your_username",
      password: "your_password",
      host: "your_host",
      port: 5432,
    ),
  );

  // 插入数据
  final user = User()
    ..username = "john_doe"
    ..password = "password123"
    ..createdAt = DateTime.now();

  await context.insertObject(user);

  // 查询数据
  final users = await context.fetch<User>();
  print(users);
}

6. 处理关系

conduit_orm 支持处理表之间的关系,如一对多、多对多等。

class Post extends ManagedObject<_Post> implements _Post {}

class _Post {
  [@primaryKey](/user/primaryKey)
  int id;

  [@Column](/user/Column)()
  String title;

  [@Relate](/user/Relate)(#posts)
  User author;
}

class User extends ManagedObject<_User> implements _User {
  ManagedSet<Post> posts;
}

class _User {
  [@primaryKey](/user/primaryKey)
  int id;

  [@Column](/user/Column)(unique: true)
  String username;

  [@Column](/user/Column)()
  String password;

  [@Column](/user/Column)()
  DateTime createdAt;
}
回到顶部