Flutter数据持久化插件pg_dorm的使用

Flutter数据持久化插件pg_dorm的使用

在Flutter应用开发中,数据持久化的实现是一个非常重要的环节。pg_dorm 是一个基于Dart语言的PostgreSQL ORM(对象关系映射)库,可以帮助开发者更方便地操作数据库。本文将通过一个完整的示例演示如何使用 pg_dorm 插件进行数据持久化。

安装依赖

首先,在项目的 pubspec.yaml 文件中添加 pg_dorm 依赖:

dependencies:
  pg_dorm: ^0.2.0

然后运行以下命令安装依赖:

flutter pub get

初始化数据库连接

在使用 pg_dorm 之前,我们需要先配置数据库连接信息。以下是初始化数据库连接的示例代码:

import 'package:pg_dorm/pg_dorm.dart';

void main() async {
  // 配置数据库连接参数
  final db = new Database(
    host: 'localhost',
    port: 5432,
    user: 'your_username',
    password: 'your_password',
    databaseName: 'your_database_name',
  );

  // 连接数据库
  await db.connect();

  print('数据库连接成功');
}

创建实体类

pg_dorm 支持通过实体类来定义数据库表结构。我们可以通过继承 Entity 类来创建实体类。例如,创建一个名为 User 的实体类:

class User extends Entity {
  int? id;
  String name;
  int age;

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

  [@override](/user/override)
  List<Object?> get props => [id, name, age];
}

定义表结构

接下来,我们需要定义与实体类对应的数据库表结构。通过 Table 类来定义表结构:

class UsersTable extends Table<User> {
  [@override](/user/override)
  String get tableName => 'users'; // 定义表名

  [@override](/user/override)
  void init() {
    id('id', autoIncrement: true); // 定义主键
    text('name'); // 定义字段
    integer('age'); // 定义字段
  }
}

插入数据

现在我们可以使用 pg_dorm 插入数据到数据库中。以下是一个插入数据的示例代码:

void insertData(Database db) async {
  final usersTable = UsersTable();

  // 创建一个新的用户实例
  final newUser = User(name: 'John Doe', age: 30);

  // 插入数据到数据库
  final insertedId = await db.insert(usersTable, newUser);
  print('新用户插入成功,ID为: $insertedId');
}

查询数据

查询数据也非常简单,可以使用 select 方法来获取数据库中的数据:

void queryData(Database db) async {
  final usersTable = UsersTable();

  // 查询所有用户
  final users = await db.select(usersTable);
  for (var user in users) {
    print('用户ID: ${user.id}, 姓名: ${user.name}, 年龄: ${user.age}');
  }
}

更新数据

更新数据可以通过 update 方法实现。以下是一个更新数据的示例代码:

void updateData(Database db) async {
  final usersTable = UsersTable();

  // 更新指定ID的用户
  final updatedRows = await db.update(usersTable, {'name': 'Jane Doe'}, where: 'id = ?', whereArgs: [1]);
  print('$updatedRows 行数据已更新');
}

删除数据

删除数据可以通过 delete 方法实现。以下是一个删除数据的示例代码:

void deleteData(Database db) async {
  final usersTable = UsersTable();

  // 删除指定ID的用户
  final deletedRows = await db.delete(usersTable, where: 'id = ?', whereArgs: [1]);
  print('$deletedRows 行数据已删除');
}

完整示例代码

以下是完整的示例代码,包括数据库连接、实体类定义、表结构定义、数据插入、查询、更新和删除:

import 'package:pg_dorm/pg_dorm.dart';

class User extends Entity {
  int? id;
  String name;
  int age;

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

  [@override](/user/override)
  List<Object?> get props => [id, name, age];
}

class UsersTable extends Table<User> {
  [@override](/user/override)
  String get tableName => 'users';

  [@override](/user/override)
  void init() {
    id('id', autoIncrement: true);
    text('name');
    integer('age');
  }
}

void main() async {
  final db = new Database(
    host: 'localhost',
    port: 5432,
    user: 'your_username',
    password: 'your_password',
    databaseName: 'your_database_name',
  );

  await db.connect();
  print('数据库连接成功');

  final usersTable = UsersTable();

  // 插入数据
  final newUser = User(name: 'John Doe', age: 30);
  final insertedId = await db.insert(usersTable, newUser);
  print('新用户插入成功,ID为: $insertedId');

  // 查询数据
  final users = await db.select(usersTable);
  for (var user in users) {
    print('用户ID: ${user.id}, 姓名: ${user.name}, 年龄: ${user.age}');
  }

  // 更新数据
  final updatedRows = await db.update(usersTable, {'name': 'Jane Doe'}, where: 'id = ?', whereArgs: [insertedId]);
  print('$updatedRows 行数据已更新');

  // 删除数据
  final deletedRows = await db.delete(usersTable, where: 'id = ?', whereArgs: [insertedId]);
  print('$deletedRows 行数据已删除');

  await db.disconnect();
  print('数据库连接已关闭');
}

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

1 回复

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


pg_dorm 是一个用于 Flutter 的数据持久化插件,它基于 PostgreSQL 数据库,并提供了类似于 ORM(对象关系映射)的功能,使得开发者可以更方便地在 Flutter 应用中操作数据库。pg_dorm 的主要特点包括:

  1. 自动生成数据库表:根据 Dart 模型类自动生成对应的数据库表。
  2. CRUD 操作:提供了简单易用的 API 来进行增删改查操作。
  3. 关系映射:支持一对一、一对多、多对多等关系映射。
  4. 查询构建器:提供了强大的查询构建器,支持复杂的查询操作。

安装 pg_dorm

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

dependencies:
  flutter:
    sdk: flutter
  pg_dorm: ^0.1.0  # 请使用最新版本

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

基本使用

1. 定义模型类

首先,你需要定义一个 Dart 模型类,并使用 pg_dorm 提供的注解来标记字段和表。

import 'package:pg_dorm/pg_dorm.dart';

@Table(name: 'users')
class User {
  @PrimaryKey()
  int id;

  @Column()
  String name;

  @Column()
  int age;

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

2. 初始化数据库

在使用 pg_dorm 之前,你需要初始化数据库连接。

import 'package:pg_dorm/pg_dorm.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  // 初始化数据库连接
  await PgDorm.init(
    host: 'localhost',
    port: 5432,
    database: 'mydatabase',
    username: 'myuser',
    password: 'mypassword',
  );

  runApp(MyApp());
}

3. 创建表

pg_dorm 可以根据模型类自动创建数据库表。

await PgDorm.createTable(User);

4. 插入数据

你可以使用 PgDorm 提供的 API 来插入数据。

final user = User(id: 1, name: 'John Doe', age: 30);
await PgDorm.insert(user);

5. 查询数据

你可以使用 PgDorm 提供的查询构建器来查询数据。

final users = await PgDorm.query<User>().where('age').greaterThan(25).toList();

6. 更新数据

你可以使用 PgDorm 提供的 API 来更新数据。

final user = await PgDorm.query<User>().where('id').equals(1).first();
user.name = 'Jane Doe';
await PgDorm.update(user);

7. 删除数据

你可以使用 PgDorm 提供的 API 来删除数据。

await PgDorm.delete<User>().where('id').equals(1).execute();

高级功能

1. 关系映射

pg_dorm 支持一对一、一对多、多对多等关系映射。你可以使用 @OneToOne@OneToMany@ManyToMany 等注解来定义关系。

@Table(name: 'posts')
class Post {
  @PrimaryKey()
  int id;

  @Column()
  String title;

  @OneToOne()
  User author;

  Post({this.id, this.title, this.author});
}

2. 查询构建器

pg_dorm 提供了强大的查询构建器,支持复杂的查询操作。

final posts = await PgDorm.query<Post>()
    .where('author.age')
    .greaterThan(25)
    .orderBy('title')
    .toList();
回到顶部