Flutter数据库操作插件angel3_orm_mysql的使用
Flutter数据库操作插件angel3_orm_mysql的使用
Angel3 ORM for MySQL 是一个用于在Flutter应用中操作MySQL或MariaDB数据库的插件。本文将详细介绍如何使用该插件进行数据库操作,并提供完整的示例代码。
支持的数据库
- MariaDB 10.2.x 或更高版本
- MySQL 8.x 或更高版本
注意: MySQL低于8.0和MariaDB低于10.2.0不支持,因为Angel3 ORM需要公共表表达式(CTE)来工作。
MySqlExecutor
MySqlExecutor
使用 mysql_client
驱动程序实现,适用于 MySQL 8.0+ 和 MariaDB 10.2+ 数据库。
连接到 MySQL 或 MariaDB
import 'package:mysql_client/mysql_client.dart';
var connection = await MySQLConnection.createConnection(
host: "localhost",
port: 3306,
databaseName: "orm_test",
userName: "test",
password: "test123",
secure: true);
var logger = Logger('orm_mysql');
await connection.connect(timeoutMs: 10000);
var executor = MySqlExecutor(connection, logger: logger);
已知限制
- 不支持
Blob
数据类型映射。 - 不支持
timestamp
数据类型映射,请使用datetime
。 - 不支持 UTC datetime。
MariaDBExecutor
MariaDBExecutor
使用 mysql1
驱动程序实现,仅适用于 MariaDB 10.2+ 数据库。
连接到 MariaDB
import 'package:mysql1/mysql1.dart';
var settings = ConnectionSettings(
host: 'localhost',
port: 3306,
db: 'orm_test',
user: 'test',
password: 'test123');
var connection = await MySqlConnection.connect(settings);
var logger = Logger('orm_mariadb');
var executor = MariaDbExecutor(connection, logger: logger);
已知限制
- 不支持
Blob
类型映射。 - 不支持
timestamp
映射,请使用datetime
。 - 仅支持 UTC datetime,非UTC datetime将自动转换为UTC datetime。
创建新的数据库
- 登录到 MariaDB/MySQL 数据库控制台:
mysql -u root -p
- 创建新数据库并授予权限:
create database orm_test;
-- 授予本地访问权限
create user 'test'@'localhost' identified by 'test123';
grant all privileges on orm_test.* to 'test'@'localhost';
-- 授予本地和远程访问权限
create user 'test'@'%' identified by 'test123';
grant all privileges on orm_test.* to 'test'@'%';
示例代码
以下是完整的示例代码,演示如何使用 angel3_orm_mysql
插件进行数据库操作:
import 'dart:io';
import 'package:angel3_migration/angel3_migration.dart';
import 'package:angel3_orm/angel3_orm.dart';
import 'package:angel3_orm_mysql/angel3_orm_mysql.dart';
import 'package:angel3_serialize/angel3_serialize.dart';
import 'package:mysql_client/mysql_client.dart';
import 'package:mysql1/mysql1.dart';
import 'package:logging/logger.dart';
import 'package:optional/optional.dart';
part 'main.g.dart';
void main() async {
//hierarchicalLoggingEnabled = true;
//await mariaDBExample();
await mysqlExample();
exit(0);
}
Future<void> mariaDBExample() async {
Logger.root
..level = Level.ALL
..onRecord.listen(print);
var settings = ConnectionSettings(
host: 'localhost',
port: 3306,
db: 'orm_test',
user: 'test',
password: 'test123');
var connection = await MySqlConnection.connect(settings);
print("Connected to MariaDb");
var logger = Logger('orm_mysql');
var executor = MariaDbExecutor(connection, logger: logger);
var query = TodoQuery();
query.values
..text = 'Clean your room!'
..updatedAt = DateTime.now().toUtc()
..isComplete = false;
var todo = await query.insert(executor);
print(todo.value.toJson());
var query2 = TodoQuery()..where!.id.equals(todo.value.idAsInt);
var todo2 = await query2.getOne(executor);
print(todo2.value.toJson());
print(todo == todo2);
}
Future<void> mysqlExample() async {
Logger.root
..level = Level.ALL
..onRecord.listen(print);
var connection = await MySQLConnection.createConnection(
host: "localhost",
port: 3306,
databaseName: "orm_test",
userName: "test",
password: "test123",
secure: true);
print("Connected to MySQL");
var logger = Logger('orm_mysql');
await connection.connect(timeoutMs: 10000);
var executor = MySqlExecutor(connection, logger: logger);
var query = TodoQuery();
query.values
..text = 'Clean your room!'
..updatedAt = DateTime.now().toUtc()
..isComplete = false;
var todo = await query.insert(executor);
print(todo.value.toJson());
var query2 = TodoQuery()..where!.id.equals(todo.value.idAsInt);
var todo2 = await query2.getOne(executor);
print(todo2.value.toJson());
print(todo == todo2);
}
@serializable
@orm
abstract class _Todo extends Model {
String? get text;
@DefaultsTo(false)
bool? isComplete;
}
通过以上步骤和示例代码,您可以轻松地在Flutter应用中使用 angel3_orm_mysql
插件进行数据库操作。
更多关于Flutter数据库操作插件angel3_orm_mysql的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter数据库操作插件angel3_orm_mysql的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何使用 angel3_orm_mysql
插件在 Flutter 中进行数据库操作的代码示例。这个插件允许你通过 ORM(对象关系映射)的方式与 MySQL 数据库进行交互。
首先,你需要在你的 pubspec.yaml
文件中添加依赖:
dependencies:
flutter:
sdk: flutter
angel3_orm: ^x.y.z # 请替换为最新版本号
angel3_mysql: ^x.y.z # 请替换为最新版本号
# 如果需要其他依赖,比如 Dart 的 MySQL 客户端,也请添加
请注意,angel3_orm_mysql
实际上并不是一个独立的包,angel3_orm
可以与 angel3_mysql
结合使用来实现 ORM 功能。你可能还需要 mysql1
或其他 Dart MySQL 客户端库来实际执行数据库操作。
接下来,是一个简单的示例,展示了如何设置 ORM 并执行基本的数据库操作:
import 'package:angel3_framework/angel3_framework.dart';
import 'package:angel3_orm/angel3_orm.dart';
import 'package:angel3_mysql/angel3_mysql.dart';
import 'package:mysql1/mysql1.dart';
part 'models/user.dart'; // 假设你有一个 User 模型
void main() async {
// 配置 MySQL 连接
var connectionSettings = ConnectionSettings(
host: 'localhost',
port: 3306,
user: 'root',
password: 'your_password',
db: 'your_database',
);
// 创建 MySQL 客户端
var mysqlClient = await MySqlClient.connect(connectionSettings);
// 配置 Angel ORM
var orm = ModelORM();
// 注册模型(假设 User 是你已经定义好的模型)
orm.registerModel<User>();
// 创建 Angel 应用并配置 ORM
var app = Angel();
var service = await createMySqlService(mysqlClient, orm);
app.use('/db', service);
// 迁移数据库(这一步通常在你的应用初始化时执行一次)
await service.migrate();
// 示例:创建一个新用户
var newUser = User()
..name = 'John Doe'
..email = 'john.doe@example.com';
// 保存到数据库
await service.readOrCreate(newUser);
// 查询用户
var users = await service.query().find();
print('Users in database: $users');
// 关闭数据库连接
await mysqlClient.close();
}
// models/user.dart
part of 'main.dart';
@serializable
class User extends Model {
@field
String name;
@field
String email;
// 构造函数等
User();
factory User.fromJson(Map json) => _$UserFromJson(json);
Map<String, dynamic> toJson() => _$UserToJson(this);
}
注意事项
-
模型定义:上面的示例中,
User
类是一个简单的模型,它使用了json_serializable
包来进行 JSON 序列化和反序列化。你需要确保你的模型类被正确定义,并且使用了@field
注解来标记数据库字段。 -
迁移:在实际应用中,数据库迁移是非常重要的。
angel3_orm
提供了一些基本的迁移功能,但你可能需要根据自己的需求扩展这些功能。 -
错误处理:上面的示例代码中没有包含错误处理逻辑。在实际应用中,你应该添加适当的错误处理来确保程序的健壮性。
-
依赖版本:确保你使用的是最新版本的
angel3_orm
和angel3_mysql
包,因为包的功能和 API 可能会随着版本的更新而变化。 -
Flutter 特定注意事项:虽然上面的代码示例可以在 Flutter 应用中运行(特别是在服务器端代码部分),但请注意,Flutter 应用通常不会直接与 MySQL 数据库交互。在实际应用中,你可能会在 Flutter 前端与一个后端服务(如使用 Dart 编写的服务器)进行通信,而后端服务再与 MySQL 数据库交互。
希望这个示例能帮助你开始使用 angel3_orm_mysql
进行数据库操作!