Flutter对象关系映射插件orm的使用
Flutter对象关系映射插件orm的使用
Prisma Client Dart
Prisma Client Dart 是一个自动生成类型安全的ORM(对象关系映射)。它使用Prisma Engine作为数据访问层,并尽可能与Prisma Client JS/TS API保持一致。
👉 了解如何在您的项目中使用Prisma ORM for Dart。
示例代码
import 'package:orm/orm.dart';
final client = PrismaClient();
main() async {
final users = await client.user.findMany();
print(users);
}
安装
这将添加如下内容到你的pubspec.yaml
文件(并隐式运行dart pub get
):
dependencies:
orm: latest
或者你可以运行以下命令:
dart pub add orm
文档
你可以在网站上找到Prisma Client Dart的文档。
文档分为以下几个部分:
你可以通过向main分支的docs文件夹发送pull请求来改进文档。
示例
你还可以在main分支的example文件夹中找到示例。
Query Engine 支持矩阵
Engine | Dart Native | Dart Web | Flutter Native | Flutter Web |
---|---|---|---|---|
Binary | ✅ | ❌ | ❌ | ❌ |
Library | ✅ | ❌ | ✅ | ❌ |
Data Proxy | ✅ | ✅ | ✅ | ✅ |
贡献
我们欢迎贡献!请阅读我们的贡献指南,以了解我们的开发过程、如何提出bug修复和改进建议,以及如何构建和测试你对Prisma的更改。
感谢所有已经为Prisma Dart做出贡献的人!
行为准则
本项目已采用贡献者契约行为准则。更多信息请参阅行为准则FAQ,或联系hello@odroe.com以获取更多问题或评论。
完整示例Demo
下面是一个完整的示例demo,展示了如何在Flutter项目中使用Prisma Client Dart进行基本的CRUD操作。
1. 创建一个新的Flutter项目
flutter create prisma_example
cd prisma_example
2. 添加依赖
在pubspec.yaml
中添加Prisma Client Dart依赖:
dependencies:
flutter:
sdk: flutter
orm: latest
然后运行dart pub get
以安装依赖。
3. 配置Prisma Schema
创建一个名为schema.prisma
的文件,并添加以下内容:
generator client {
provider = "prisma-client-dart"
}
datasource db {
provider = "sqlite"
url = "file:./dev.db"
}
model User {
id Int @id @default(autoincrement())
email String @unique
name String?
}
4. 生成Prisma Client
运行以下命令以生成Prisma Client:
npx prisma generate
5. 编写Flutter代码
在lib/main.dart
中编写以下代码:
import 'package:flutter/material.dart';
import 'package:orm/orm.dart';
void main() async {
final client = PrismaClient();
runApp(MyApp(client));
}
class MyApp extends StatelessWidget {
final PrismaClient client;
MyApp(this.client);
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Prisma Example',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(client),
);
}
}
class MyHomePage extends StatefulWidget {
final PrismaClient client;
MyHomePage(this.client);
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
List<User> users = [];
@override
void initState() {
super.initState();
_fetchUsers();
}
Future<void> _fetchUsers() async {
final fetchedUsers = await widget.client.user.findMany();
setState(() {
users = fetchedUsers;
});
}
Future<void> _addUser(String email, String name) async {
await widget.client.user.create(
data: UserCreateInput(email: email, name: name),
);
_fetchUsers();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Prisma Example'),
),
body: ListView.builder(
itemCount: users.length,
itemBuilder: (context, index) {
final user = users[index];
return ListTile(
title: Text(user.name ?? 'No Name'),
subtitle: Text(user.email),
);
},
),
floatingActionButton: FloatingActionButton(
onPressed: () {
showDialog(
context: context,
builder: (context) => AlertDialog(
title: Text('Add User'),
content: Column(
mainAxisSize: MainAxisSize.min,
children: [
TextField(
decoration: InputDecoration(labelText: 'Email'),
onChanged: (value) => email = value,
),
TextField(
decoration: InputDecoration(labelText: 'Name'),
onChanged: (value) => name = value,
),
],
),
actions: [
TextButton(
child: Text('Cancel'),
onPressed: () => Navigator.pop(context),
),
TextButton(
child: Text('Add'),
onPressed: () {
_addUser(email, name);
Navigator.pop(context);
},
),
],
),
);
},
child: Icon(Icons.add),
),
);
}
}
6. 运行应用程序
确保你已经安装了SQLite,并且数据库文件路径正确。然后运行以下命令启动应用程序:
flutter run
现在你应该可以看到一个简单的用户管理界面,可以添加和查看用户。
希望这个示例能帮助你更好地理解和使用Prisma Client Dart。如果你有任何问题或需要进一步的帮助,请随时参考官方文档或加入社区讨论。
更多关于Flutter对象关系映射插件orm的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter对象关系映射插件orm的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中,对象关系映射(ORM)插件可以帮助开发者以面向对象的方式操作数据库,从而简化数据持久化的过程。一个流行的Flutter ORM插件是floor
。下面是一个使用floor
插件的示例代码案例,展示了如何进行基本的CRUD(创建、读取、更新、删除)操作。
1. 添加依赖
首先,在pubspec.yaml
文件中添加floor
依赖:
dependencies:
flutter:
sdk: flutter
floor: ^1.0.0 # 请确保使用最新版本
dev_dependencies:
build_runner: ^2.0.0
floor_generator: ^1.0.0 # 与floor版本匹配
2. 创建数据模型
创建一个数据模型类,并使用@Entity
注解标记它。同时,使用@ColumnInfo
注解标记字段。
import 'package:floor/floor.dart';
@Entity(tableName: 'users')
class User {
@PrimaryKey(autoGenerate: true)
final int id;
@ColumnInfo(name: 'name')
final String name;
User({required this.name, this.id = 0});
}
3. 创建DAO接口
定义一个数据访问对象(DAO)接口,用于定义数据库操作。
import 'package:floor/floor.dart';
import 'user.dart';
@Dao
abstract class UserDao {
@Query('SELECT * FROM users')
Future<List<User>> findAllUsers();
@Insert(onConflict: OnConflictStrategy.replace)
Future<void> insertUser(User user);
@Update(onConflict: OnConflictStrategy.replace)
Future<void> updateUser(User user);
@Delete
Future<void> deleteUser(User user);
}
4. 定义数据库
创建一个数据库类,并使用@Database
注解标记它,同时指定DAO接口。
import 'package:floor/floor.dart';
import 'user_dao.dart';
import 'user.dart';
@Database(version: 1, entities: [User])
abstract class AppDatabase extends FloorDatabase {
UserDao get userDao;
}
5. 生成数据库代码
在项目根目录下运行以下命令以生成数据库代码:
flutter pub run build_runner build
6. 使用数据库
在应用中使用生成的数据库实例进行CRUD操作。
import 'package:flutter/material.dart';
import 'package:your_app_name/database/app_database.dart';
import 'package:your_app_name/models/user.dart';
import 'package:sqflite/sqflite.dart' as sqflite;
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 打开数据库连接(注意:floor内部处理,这里仅为了演示)
final database = await $FloorAppDatabase.databaseBuilder('your_database_name.db').build();
final userDao = database.userDao;
runApp(MyApp(userDao: userDao, database: database));
}
class MyApp extends StatelessWidget {
final UserDao userDao;
final AppDatabase database;
MyApp({required this.userDao, required this.database});
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('Floor ORM Example')),
body: Center(
child: ElevatedButton(
onPressed: () async {
// 插入用户
final user = User(name: 'John Doe');
await userDao.insertUser(user);
// 读取用户
final users = await userDao.findAllUsers();
print(users);
// 更新用户
user.name = 'Jane Doe';
await userDao.updateUser(user);
// 删除用户
await userDao.deleteUser(user);
// 关闭数据库(floor内部处理连接池,这里仅为了演示)
await database.close();
},
child: Text('Perform Database Operations'),
),
),
),
);
}
}
注意事项
- 数据库升级:如果数据库结构发生变化(例如添加新字段),需要增加版本号并处理迁移逻辑。
- 异常处理:在实际应用中,应该添加异常处理逻辑以处理可能的数据库错误。
- 依赖注入:对于更复杂的应用,考虑使用依赖注入框架(如
provider
或get_it
)来管理数据库实例。
这个示例展示了如何使用floor
插件在Flutter应用中进行基本的对象关系映射操作。根据你的具体需求,你可以进一步扩展这个基础代码。