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库:减少样板代码,适合复杂项目。
根据项目复杂度选择合适方案即可。
 
        
       
             
             
            

