Flutter ORM服务插件angel3_orm_service的使用
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
更多关于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
文件。
接下来,配置你的 AngelORM
和 AngelORMService
。在你的主文件(通常是 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功能来进行数据操作。上面的代码示例展示了如何配置 AngelORM
和 AngelORMService
,并插入和查询数据。
在实际应用中,你可能希望将这些数据操作封装在一个单独的服务或仓库类中,并在你的Flutter UI中调用这些服务。上面的示例主要是为了展示基本的集成和配置过程。