Flutter ORM服务插件angel3_orm_service的使用

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

Flutter ORM服务插件angel3_orm_service的使用

安装

在你的 pubspec.yaml 文件中添加依赖:

dependencies:
    angel3_orm_service: ^8.0.0

使用

以下是一个简短的示例(完整的设置请查看 example/main.dart):

import 'package:angel3_framework/angel3_framework.dart';
import 'package:angel3_framework/http.dart';
import 'package:angel3_orm_service/angel3_orm_service.dart';
import 'package:logging/logging.dart';
import 'connect.dart';
import 'todo.dart';

void main() async {
  // 设置日志记录和数据库连接。
  hierarchicalLoggingEnabled = true;
  var app = Angel(logger: Logger.detached('orm_service'));
  var http = AngelHttp(app);
  var executor = await connect();
  app.logger.onRecord.listen((rec) {
    print(rec);
    if (rec.error != null) print(rec.error);
    if (rec.stackTrace != null) print(rec.stackTrace);
  });

  // 创建一个基于ORM的服务。
  var todoService = OrmService<int, Todo, TodoQuery>(
      executor, () => TodoQuery(),
      readData: (req, res) => todoSerializer.decode(req.bodyAsMap));

  // 因为我们提供了 `readData`,所以 todoService 可以面向Web。
  // **重要提示:如果你的模型使用了 `int` 类型的ID(例如使用了 `angel_orm_generator` 和 `Model`),那么必须提供类型参数。**
  app.use<int, Todo, OrmService<int, Todo, TodoQuery>>(
      '/api/todos', todoService);

  // 当程序结束时进行清理。
  app.shutdownHooks.add((_) => executor.close());

  // 启动HTTP服务器。
  await http.startServer('127.0.0.1', 3000);
  print('Listening at ${http.uri}');
  print('Todos API: ${http.uri}/api/todos');
}

示例代码

以下是完整的示例代码,位于 example/main.dart 文件中:

import 'package:angel3_framework/angel3_framework.dart';
import 'package:angel3_framework/http.dart';
import 'package:angel3_orm_service/angel3_orm_service.dart';
import 'package:logging/logging.dart';
import 'connect.dart';
import 'todo.dart';

void main() async {
  // 设置日志记录和数据库连接。
  hierarchicalLoggingEnabled = true;
  var app = Angel(logger: Logger.detached('orm_service'));
  var http = AngelHttp(app);
  var executor = await connect();
  app.logger.onRecord.listen((rec) {
    print(rec);
    if (rec.error != null) print(rec.error);
    if (rec.stackTrace != null) print(rec.stackTrace);
  });

  // 创建一个基于ORM的服务。
  var todoService = OrmService<int, Todo, TodoQuery>(
      executor, () => TodoQuery(),
      readData: (req, res) => todoSerializer.decode(req.bodyAsMap));

  // 因为我们提供了 `readData`,所以 todoService 可以面向Web。
  // **重要提示:如果你的模型使用了 `int` 类型的ID(例如使用了 `angel_orm_generator` 和 `Model`),那么必须提供类型参数。**
  app.use<int, Todo, OrmService<int, Todo, TodoQuery>>(
      '/api/todos', todoService);

  // 当程序结束时进行清理。
  app.shutdownHooks.add((_) => executor.close());

  // 启动HTTP服务器。
  await http.startServer('127.0.0.1', 3000);
  print('Listening at ${http.uri}');
  print('Todos API: ${http.uri}/api/todos');
}

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

1 回复

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


当然,关于Flutter ORM服务插件 angel3_orm_service 的使用,以下是一个基本的代码示例,展示如何在Flutter项目中集成并使用这个插件。假设你已经有一个Flutter项目,并且已经添加了 angel3_orm_service 依赖。

首先,确保在你的 pubspec.yaml 文件中添加 angel3_orm_service 及其相关依赖:

dependencies:
  flutter:
    sdk: flutter
  angel3_orm: ^x.y.z  # 替换为最新版本号
  angel3_orm_service: ^x.y.z  # 替换为最新版本号
  # 其他依赖...

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

接下来,在你的项目中创建一个简单的模型(Model),例如 User 模型:

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});
}

然后,使用 build_runner 生成序列化代码:

flutter pub run build_runner build

这将在你的项目根目录下生成一个 user.g.dart 文件。

接下来,配置你的 AngelORMAngelORMService。在你的主文件(通常是 main.dart 或一个专门的服务配置文件)中:

import 'dart:async';
import 'package:flutter/material.dart';
import 'package:angel3_framework/angel3_framework.dart';
import 'package:angel3_orm/angel3_orm.dart';
import 'package:angel3_orm_service/angel3_orm_service.dart';
import 'user.dart'; // 导入你的User模型

Future<void> main() async {
  // 创建Angel应用
  var app = Angel();

  // 配置数据库(这里以内存数据库为例)
  var memory = MemoryDatabase();
  var orm = ORM(memory);
  
  // 注册User模型
  orm.registerModel<User>();

  // 创建ORMService
  var ormService = ORMService(orm);

  // 将ORMService挂载到Angel应用
  app.use('/users', ormService);

  // 启动Angel应用(在Flutter中,这通常不会真正启动一个HTTP服务器,
  // 但可以用于配置和测试ORM服务)
  await app.configureServer();

  // 示例:插入一个用户并查询
  runZoned(() async {
    // 插入用户
    var user = User(name: 'Alice', age: 30);
    await orm.model<User>().create(user);

    // 查询用户
    var users = await orm.model<User>().query().findAll();
    print('Users in database: $users');
  }, onError: (e, s) {
    print('Error: $e\nStacktrace: $s');
  });

  // 在Flutter应用中,你可能不会真正运行一个Angel服务器,
  // 但你可以使用配置好的orm来进行数据操作。
  runApp(MyApp());
}

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

请注意,在Flutter应用中,你通常不会真正启动一个Angel HTTP服务器,但你可以使用Angel的ORM功能来进行数据操作。上面的代码示例展示了如何配置 AngelORMAngelORMService,并插入和查询数据。

在实际应用中,你可能希望将这些数据操作封装在一个单独的服务或仓库类中,并在你的Flutter UI中调用这些服务。上面的示例主要是为了展示基本的集成和配置过程。

回到顶部