Flutter数据库管理插件easy_orm_postgres的使用

Flutter数据库管理插件easy_orm_postgres的使用

Easy ORM Postgresql 是什么?

Easy ORM是一个简单的方式来使用你的PostgreSQL数据库,并将Dart对象映射到SQL查询以及将SQL结果映射回Dart对象。

所有内容都是强类型的(返回的数据、查询、插入等),并且为你创建数据库模型。我认为可以说Easy ORM是唯一一个在PostgreSQL上工作的ORM,并且实现了这一点。

ORM代表对象关系映射(Object Relational Mapping)。其他语言的流行ORM包括SQLAlchemy和Entity Framework。

Easy ORM目前是一个低功能版本的这些ORM,支持基本的插入、更新、选择和删除语句。Where子句支持嵌套和简单的“与”、“或”语句。其目的是尽量少用SQL,当确实需要使用时,可以通过此ORM使用存储过程或视图(从v0.4.0开始支持)。

功能可能有所缺失,但我希望基本功能已经到位。如果你想要某个功能或增强功能,请去GitHub添加一个issue。

快速示例使用

这里我们从Northwind数据库中选择state_id大于30且名称以’ia’结尾的US States。如果你想添加一个功能或增强功能,请去GitHub添加一个issue。

var result = await Db().us_states.selectQuery(
    where: ((e) => Where(e.state_name.like("%ia"))),
);

如果你想要运行example项目中的示例,请从GitHub获取源码,然后创建一个本地的SQL数据库(脚本文件名为script2CreateLocalSqlDockerDb.sh)。

如何使用

安装

  1. 添加以下开发依赖项和标准依赖项:
dart pub add --dev freezed
dart pub add --dev build_runner
dart pub add --dev json_serializable
dart pub add easy_orm_postgres
  1. 安装CLI工具,运行以下命令:
dart pub global activate easy_orm_cli
  1. 使用终端导航到你的项目的根目录(即包含pubspec.yaml文件的文件夹),然后运行generate命令来创建数据库的.dart文件。你需要知道数据库登录信息并指定所有参数(主机、端口、数据库名、用户名、密码、模式)。你还需要指定Dart项目的包名。CLI工具会访问你的数据库并从PostgreSQL表information_schema.columns中读取数据,请确保你的SQL登录具有该表的访问权限。
easy_orm_cli generate --host localhost --port 5433 --db postgres -u postgres -p postgres --schema public --package example
  1. 创建一个PostgreSQL连接:
var connection = PostgreSQLConnection('localhost', 5433, 'postgres', username: 'postgres', password: 'postgres');
  1. 导入Db文件:
import 'package:example/generatedDb/db/Db.dart';
  1. 添加一个简单的查询(定义查询时需要传入连接对象):
var result = await Db().us_states.selectQuery(
    where: ((e) => Where(e.state_name.like("%ia"))),
);
  1. 打印查询结果(结果类型为SqlResponse_SuccessSqlResponse_Failure,这里假设它是成功的):
print((result as SqlResponse_Success<List<Us_state>>).result);

…这样就完成了。你可以编写代码来自动访问你的数据库,并在对象之间自动映射,而无需编写任何SQL代码!

更多示例

查看GitHub上的easy_orm/example/test部分。

SQL vs easy_orm Dart代码

SQL Dart
sql SELECT * from categories; dart await Db().categories.selectQuery();
sql SELECT * from products WHERE unit_price > 10; dart await Db().products.selectQuery(where: (x) => Where(x.unit_price.gt(10)));
sql SELECT supplier_id, category_id FROM products dart await Db().products.selectQuery2Cols((e) => e.supplier_id, (e) => e.category_id);
sql SELECT DISTINCT supplier_id FROM products ```dart var result = await Db().products.selectQuery1Col((e) => e.supplier_id); var supplierIds = (result as SqlResponse_Success<List<int?>>).result; supplierIds.toSet();

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

1 回复

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


当然,以下是一个关于如何在Flutter项目中使用easy_orm_postgres插件进行数据库管理的示例代码。easy_orm_postgres是一个用于Flutter的ORM(对象关系映射)插件,它简化了与PostgreSQL数据库的交互。

首先,确保你已经在pubspec.yaml文件中添加了easy_orm_postgres依赖:

dependencies:
  flutter:
    sdk: flutter
  easy_orm_postgres: ^最新版本号

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

接下来,我们编写一些示例代码来展示如何使用easy_orm_postgres

1. 配置数据库连接

首先,我们需要配置数据库连接。这通常在应用的入口文件(如main.dart)中完成。

import 'package:flutter/material.dart';
import 'package:easy_orm_postgres/easy_orm_postgres.dart';

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

  // 配置数据库连接
  var config = PostgresConfig(
    host: 'your_database_host',
    port: 5432,
    database: 'your_database_name',
    username: 'your_username',
    password: 'your_password',
  );

  // 初始化ORM
  await PostgresORM.init(config);

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter PostgreSQL ORM Demo'),
        ),
        body: Center(
          child: Text('Check the console for database operations.'),
        ),
      ),
    );
  }
}

2. 定义数据模型

接下来,我们定义一个数据模型。这个模型将映射到数据库中的一个表。

import 'package:easy_orm_postgres/easy_orm_postgres.dart';

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

  @Column()
  String name;

  @Column()
  int age;

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

  // 构造函数用于从数据库创建对象
  User.fromJson(Map<String, dynamic> json)
      : id = json['id'] as int,
        name = json['name'] as String,
        age = json['age'] as int;

  // 将对象转换为JSON,用于保存到数据库
  Map<String, dynamic> toJson() => {
        'id': id,
        'name': name,
        'age': age,
      };
}

3. 执行数据库操作

现在,我们可以在应用的任何部分执行数据库操作,如插入、查询、更新和删除。

import 'package:flutter/material.dart';
import 'package:easy_orm_postgres/easy_orm_postgres.dart';
import 'user_model.dart'; // 假设上面的User类在这个文件中

class DatabaseDemo extends StatefulWidget {
  @override
  _DatabaseDemoState createState() => _DatabaseDemoState();
}

class _DatabaseDemoState extends State<DatabaseDemo> {
  @override
  void initState() {
    super.initState();
    _performDatabaseOperations();
  }

  Future<void> _performDatabaseOperations() async {
    // 插入数据
    var newUser = User(id: 1, name: 'John Doe', age: 30);
    await User.insert(newUser);

    // 查询数据
    var users = await User.query().findAll();
    users.forEach((user) {
      print('User: ${user.name}, Age: ${user.age}');
    });

    // 更新数据
    var userToUpdate = users.first;
    userToUpdate.age = 31;
    await userToUpdate.update();

    // 删除数据
    await User.deleteWhere(User.id == userToUpdate.id);
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Database Operations'),
      ),
      body: Center(
        child: Text('Database operations are being performed. Check the console.'),
      ),
    );
  }
}

请注意,这个示例代码假设你已经在PostgreSQL数据库中创建了相应的users表,并且表的结构与User类匹配。在实际应用中,你可能还需要处理错误、异步操作以及更复杂的查询逻辑。

希望这个示例能帮助你开始在Flutter项目中使用easy_orm_postgres进行数据库管理!

回到顶部