Flutter数据库ORM插件static_postgres_orm的使用
Flutter数据库ORM插件static_postgres_orm的使用
使用
以下是一个简单的使用示例:
import 'package:static_postgres_orm/static_postgres_orm.dart';
import 'package:dartz/dartz.dart';
// 定义数据字段类
class _DataFields extends GenericDataFields {
late final IntegerField_PG _company_id;
late final IntegerField_PG _product_id;
late final StringField_WithDefault_PG _description;
late final StringField_WithDefault_PG _code;
late final BooleanField_WithDefault_PG _is_active;
late final NumericField_WithDefault_PG _price;
late final StringField_WithDefault_PG _full_description;
late final DateField_WithDefault_PG _insert_date;
late final DateTimeField_WithDefault_PG _update_date;
late final TimeField_PG _insert_time;
_DataFields() : super() {
fields = <GenericField>[];
_createFields();
_addFields();
}
_DataFields get _backup => getBackup(this) as _DataFields;
set _backup(_DataFields v) => setBackup(this, v);
// 创建字段
void _createFields() {
_company_id = IntegerField_PG(this, 'company_id', true, true);
_product_id = IntegerField_PG(this, 'product_id', true, true);
_code =
StringField_WithDefault_PG(this, 'code', false, false, 50, 'aloja!!!!');
_description = StringField_WithDefault_PG(
this, 'description', false, false, 200, 'produto genérico');
_is_active =
BooleanField_WithDefault_PG(this, 'is_active', false, false, false);
_price = NumericField_WithDefault_PG(this, 'price', false, false, 0);
_full_description = StringField_WithDefault_PG(
this, 'full_description', false, false, -1, 'Aloja!');
_insert_date = DateField_WithDefault_PG(
this, 'insert_date', false, false, DateTime.now());
_update_date = DateTimeField_WithDefault_PG(
this, 'update_date', false, false, DateTime.now());
_insert_time = TimeField_PG(this, 'insert_time', false, false);
}
// 获取字段
GenericField getCooField(_DataFields origin, String field) {
return origin.fields
.firstWhere((element) => getFieldName(element) == field);
}
// 克隆字段
void _cloneField(_DataFields origin) {
fields.forEach((element) {
element.copy(getCooField(origin, getFieldName(element)));
});
}
[@override](/user/override)
void backup() {
_backup = _DataFields();
_backup._cloneField(this);
}
[@override](/user/override)
void restore() {
if (assigned) {
_cloneField(_backup);
finalize();
}
}
// 添加字段
void _addFields() {
fields.add(_company_id);
fields.add(_product_id);
fields.add(_code);
fields.add(_description);
fields.add(_is_active);
fields.add(_price);
fields.add(_full_description);
fields.add(_insert_date);
fields.add(_update_date);
fields.add(_insert_time);
}
}
// 定义ORM类
class Product_ORM extends PostgressORM {
static final Event _addRecord = Event();
_DataFields get _dataFields => getRecords(this)[rowIndex] as _DataFields;
IntegerField get product_id => _dataFields._product_id;
IntegerField get company_id => _dataFields._company_id;
StringField_WithDefault get description => _dataFields._description;
StringField_WithDefault get code => _dataFields._code;
BooleanField_WithDefault get is_active => _dataFields._is_active;
NumericField_WithDefault get price => _dataFields._price;
StringField_WithDefault get full_description => _dataFields._full_description;
DateField_WithDefault get insert_date => _dataFields._insert_date;
DateTimeField_WithDefault get update_date => _dataFields._update_date;
TimeField get insert_time => _dataFields._insert_time;
Product_ORM(Postgres_SqlConnection sqlConnection)
: super(sqlConnection, 'public', 'product', _addRecord) {
_addRecord.action = _executeAddRecord;
getRecords(this).add(_DataFields());
}
// 执行添加记录操作
void _executeAddRecord() {
getRecords(this).add(_DataFields());
}
// 物化查询
Future<Either<ErrorSqlResult, SelectSuccesSqlResult>> materialize(
int company_id, int product_id) async {
return getMaterialize(
this,
(<GenericField>[]
..add(IntegerField_PG.clone(_dataFields._company_id)
..setValue(company_id))
..add(IntegerField_PG.clone(_dataFields._product_id)
..setValue(product_id))));
}
// 删除记录
Future<Either<ErrorSqlResult, ExecuteSuccesSqlResult>> deleteRecord(
int company_id, int product_id) async {
return getDeleteRecord(
this,
(<GenericField>[]
..add(IntegerField_PG.clone(_dataFields._company_id)
..setValue(company_id))
..add(IntegerField_PG.clone(_dataFields._product_id)
..setValue(product_id))));
}
}
更多关于Flutter数据库ORM插件static_postgres_orm的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter数据库ORM插件static_postgres_orm的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
static_postgres_orm
是一个用于 Flutter 的 PostgreSQL ORM(对象关系映射)插件,它允许你通过 Dart 代码与 PostgreSQL 数据库进行交互。这个插件的主要特点是它生成了静态类型的模型和查询,从而提供了更好的类型安全和开发体验。
安装
首先,你需要在 pubspec.yaml
文件中添加 static_postgres_orm
依赖:
dependencies:
flutter:
sdk: flutter
static_postgres_orm: ^0.1.0 # 请根据实际情况使用最新版本
然后运行 flutter pub get
来安装依赖。
配置
-
配置数据库连接:你需要在
lib
目录下创建一个postgres.yaml
文件来配置数据库连接信息:database: host: localhost port: 5432 database: my_database user: my_user password: my_password
-
生成模型:使用
static_postgres_orm
提供的命令行工具来生成模型和查询代码。在项目根目录下运行:flutter pub run static_postgres_orm:generate
这将根据你的数据库表结构生成对应的 Dart 模型和查询类。
使用生成的模型
假设你有一个名为 users
的表,生成工具会为你生成一个 User
模型和 UserQuery
类。
查询数据
import 'package:static_postgres_orm/static_postgres_orm.dart';
import 'generated/models.dart'; // 生成的模型文件
void fetchUsers() async {
final query = UserQuery();
final users = await query.getAll();
for (var user in users) {
print('User: ${user.name}, Email: ${user.email}');
}
}
插入数据
void insertUser() async {
final user = User()
..name = 'John Doe'
..email = 'john.doe@example.com';
await user.insert();
}
更新数据
void updateUser() async {
final query = UserQuery();
final user = await query.getById(1);
if (user != null) {
user.name = 'Jane Doe';
await user.update();
}
}
删除数据
void deleteUser() async {
final query = UserQuery();
final user = await query.getById(1);
if (user != null) {
await user.delete();
}
}
自定义查询
你可以使用 UserQuery
类来构建自定义查询:
void customQuery() async {
final query = UserQuery()
..where((user) => user.email.like('%example.com'))
..orderBy((user) => user.name.asc());
final users = await query.getAll();
for (var user in users) {
print('User: ${user.name}, Email: ${user.email}');
}
}
事务处理
static_postgres_orm
也支持事务处理:
void transactionExample() async {
final transaction = await PostgresORM.beginTransaction();
try {
final user = User()
..name = 'Alice'
..email = 'alice@example.com';
await user.insert(transaction: transaction);
await transaction.commit();
} catch (e) {
await transaction.rollback();
print('Transaction failed: $e');
}
}