Flutter数据库ORM管理插件angel3_orm_postgres的使用

发布于 1周前 作者 vueper 来自 Flutter

Flutter数据库ORM管理插件angel3_orm_postgres的使用

Angel3 ORM for PostgreSQL

Pub Version (including pre-releases) Null Safety Gitter License

Angel3 ORM 对 PostgreSQL 的支持。

支持的数据库

  • PostgreSQL 版本 10 或更高版本

有关 ORM 的文档,请参阅 Developer Guide

迁移

从版本 7.x 到 8.1.x

自 8.1.0 版本起,postgres 已从 2.x.x 升级到 3.x.x。这是一个破坏性变更,因为 postgres 3.x.x 大幅更改了其 API。因此,在升级到 8.1.0 及以上版本时,需要迁移 PostgreSQL 连接设置。其余部分应保持不变。请参阅新 PostgreSQL 连接设置的示例。

示例代码

以下是一个完整的示例,展示了如何使用 angel3_orm_postgres 插件连接到 PostgreSQL 数据库并执行查询:

import 'dart:io';
import 'package:angel3_orm_postgres/angel3_orm_postgres.dart';
import 'package:postgres/postgres.dart';

void main() async {
  // 创建一个 PostgreSQL 连接池执行器
  var executor = PostgreSqlPoolExecutor(
    Pool.withEndpoints(
      [
        Endpoint(
          host: Platform.environment['POSTGRES_HOSTNAME'] ?? 'localhost',
          port: 5432,
          database: Platform.environment['POSTGRES_DB'] ?? 'orm_test',
          username: Platform.environment['POSTGRES_USERNAME'] ?? 'test',
          password: Platform.environment['POSTGRES_PASSWORD'] ?? 'test123',
        )
      ],
      settings: PoolSettings(
        maxConnectionAge: Duration(hours: 1),
        maxConnectionCount: 5,
      ),
    ),
  );

  try {
    // 执行查询并获取结果
    var rows = await executor.query('users', 'SELECT * FROM users', {});
    print(rows);
  } catch (e) {
    // 捕获并打印任何错误
    print('Error: $e');
  } finally {
    // 确保在完成所有操作后关闭连接池
    await executor.close();
  }
}

关键点说明

  1. 环境变量:通过 Platform.environment 获取环境变量来配置数据库连接参数。这样可以避免硬编码敏感信息。
  2. 连接池设置:使用 PoolSettings 配置连接池的最大连接年龄和最大连接数,以优化性能。
  3. 异常处理:使用 try-catch-finally 结构确保即使发生错误也能正确关闭连接池。
  4. 查询执行:通过 executor.query 方法执行 SQL 查询,并将结果打印出来。

通过以上步骤,您可以轻松地在 Flutter 应用中集成 angel3_orm_postgres 插件,实现对 PostgreSQL 数据库的 ORM 管理。如果您有任何问题或需要进一步的帮助,请随时查阅官方文档或访问 Gitter 社区进行讨论。


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

1 回复

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


当然,下面是一个关于如何使用Flutter中的angel3_orm_postgres插件进行数据库ORM管理的代码示例。这个示例将展示如何连接到PostgreSQL数据库,定义模型,并执行基本的CRUD(创建、读取、更新、删除)操作。

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

dependencies:
  flutter:
    sdk: flutter
  angel3_framework: ^4.0.0 # 或者最新版本
  angel3_orm: ^3.0.0 # 或者最新版本
  angel3_orm_postgres: ^3.0.0 # 或者最新版本
  postgres: ^2.0.0 # 或者最新版本

然后,运行flutter pub get来安装这些依赖项。

接下来,创建一个Flutter项目(如果还没有的话),并在lib目录下创建一个新的Dart文件,比如database.dart,用于管理数据库连接和模型定义。

database.dart

import 'package:angel3_framework/angel3_framework.dart';
import 'package:angel3_orm/angel3_orm.dart';
import 'package:angel3_orm_postgres/angel3_orm_postgres.dart';
import 'package:postgres/postgres.dart';

part 'models/user.dart'; // 假设我们将模型定义在models文件夹中

Future<Angel> configureServer() async {
  var app = Angel();

  // 配置PostgreSQL连接
  var connectionInfo = ConnectionInfo(
      'your_database_host', // 替换为你的数据库主机
      port: 5432,           // PostgreSQL默认端口
      databaseName: 'your_database_name', // 替换为你的数据库名称
      username: 'your_username', // 替换为你的数据库用户名
      password: 'your_password' // 替换为你的数据库密码
  );

  var pool = await PostgreSQLConnectionPool.connect(connectionInfo);

  // 配置ORM
  var orm = new AngelORM(pool);
  orm.registerModel<User>(); // 注册User模型

  app.use('/api/users', Service<User>(orm)); // 挂载服务到/api/users路径

  return app;
}

models/user.dart

import 'package:angel3_orm/angel3_orm.dart';

part 'user.g.dart'; // 自动生成的代码将放在这里

@serializable
class User extends Model {
  String? name;
  int? age;

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

final UserSchema _userSchema = UserSchema();

@ModelSchema(schema: _userSchema)
class UserSchema extends ModelSchema<User> {
  @override
  Map<String, dynamic> toJson(User model, {bool includeRelations = false}) {
    return {
      'name': model.name,
      'age': model.age,
    };
  }

  @override
  User fromJson(Map<String, dynamic> json, {User? instance}) {
    return User(name: json['name'] as String?, age: json['age'] as int?);
  }
}

main.dart

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

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

  var app = await configureServer();

  // 这里你可以启动一个HTTP服务器来监听请求,但为了简单起见,我们不在Flutter应用中实际启动服务器。
  // 在实际应用中,你可能会在后台隔离中运行服务器,或者这只是一个服务器端代码示例。
  // 例如,使用`app.listen(port: 3000);`来启动服务器。

  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 server logs.'),
        ),
      ),
    );
  }
}

注意:这个示例是为了展示如何在Flutter项目中配置和使用angel3_orm_postgres插件。然而,在Flutter前端应用中通常不会直接运行这样的服务器代码。你可能需要将服务器代码放在一个单独的服务端项目中(例如,一个Dart命令行应用),并在Flutter前端通过HTTP请求与之交互。

确保在运行代码之前替换数据库连接信息(如主机名、数据库名、用户名和密码)为你的实际数据库信息。此外,你可能需要运行build_runner命令来生成序列化代码:

flutter pub run build_runner build

这个命令会在models/user.g.dart文件中生成必要的序列化代码。

回到顶部