Flutter中如何实现SQLite的bean映射
在Flutter中使用SQLite时,如何将数据库表的数据映射到Dart的bean类?目前我创建了数据库表和对应的bean类,但每次查询都需要手动解析字段,比较繁琐。是否有类似Android中Room的自动映射方案?或者推荐哪些第三方库可以实现这个功能?最好能提供简单的代码示例说明如何配置和使用。
2 回复
在Flutter中,使用sqflite库操作SQLite时,可通过以下方式实现bean映射:
- 创建模型类,定义字段和
toMap()、fromMap()方法。 - 使用
json_annotation和json_serializable自动生成序列化代码。 - 在数据库操作中调用这些方法进行对象与Map的转换。
示例:
class User {
final int id;
final String name;
User({this.id, this.name});
Map<String, dynamic> toMap() {
return {'id': id, 'name': name};
}
factory User.fromMap(Map<String, dynamic> map) {
return User(id: map['id'], name: map['name']);
}
}
更多关于Flutter中如何实现SQLite的bean映射的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中实现SQLite的bean映射(对象关系映射,ORM)可以通过以下步骤完成,推荐使用sqflite库结合手动映射或第三方ORM库来简化操作:
1. 添加依赖
在 pubspec.yaml 中添加:
dependencies:
sqflite: ^2.0.0+4
path: ^1.8.0
2. 创建Bean类
定义一个Dart类(例如User),包含字段和toMap/fromMap方法:
class User {
final int? id;
final String name;
final int age;
User({this.id, required this.name, required this.age});
// 转换为Map(用于插入/更新数据库)
Map<String, dynamic> toMap() {
return {
'id': id,
'name': name,
'age': age,
};
}
// 从Map解析(用于查询数据)
factory User.fromMap(Map<String, dynamic> map) {
return User(
id: map['id'],
name: map['name'],
age: map['age'],
);
}
}
3. 数据库操作
创建数据库帮助类,实现增删改查:
import 'package:sqflite/sqflite.dart';
import 'package:path/path.dart';
class DatabaseHelper {
static final _databaseName = "my_database.db";
static final _databaseVersion = 1;
static final table = 'users';
static final columnId = 'id';
static final columnName = 'name';
static final columnAge = 'age';
// 单例模式
static Database? _database;
Future<Database> get database async {
_database ??= await _initDatabase();
return _database!;
}
_initDatabase() async {
String path = join(await getDatabasesPath(), _databaseName);
return await openDatabase(
path,
version: _databaseVersion,
onCreate: _onCreate,
);
}
// 创建表
Future _onCreate(Database db, int version) async {
await db.execute('''
CREATE TABLE $table (
$columnId INTEGER PRIMARY KEY AUTOINCREMENT,
$columnName TEXT NOT NULL,
$columnAge INTEGER NOT NULL
)
''');
}
// 插入用户
Future<int> insertUser(User user) async {
Database db = await database;
return await db.insert(table, user.toMap());
}
// 查询所有用户
Future<List<User>> getUsers() async {
Database db = await database;
List<Map> maps = await db.query(table);
return maps.map((map) => User.fromMap(map as Map<String, dynamic>)).toList();
}
}
4. 使用ORM库(可选)
如需更高级功能,可使用以下库简化操作:
- Floor: 提供注解驱动的ORM(推荐)
- 添加依赖:
dependencies: floor: ^1.4.0 dev_dependencies: floor_generator: ^1.4.0 build_runner: ^2.1.0- 使用注解定义实体和DAO,通过
build_runner生成代码。
总结
- 手动映射:灵活可控,适合简单需求。
- ORM库:减少样板代码,适合复杂项目。
根据项目复杂度选择合适方案即可。

