Flutter ORM框架插件get_orm的使用

Flutter ORM框架插件get_orm的使用

在Flutter开发中,ORM(对象关系映射)框架可以帮助开发者更方便地操作数据库。get_orm 是一个基于 getx 的轻量级ORM框架,它支持多种数据库操作,并提供了简洁的API。

以下是一个完整的示例,展示如何使用 get_orm 插件进行数据库操作。


安装依赖

首先,在 pubspec.yaml 文件中添加 get_orm 依赖:

dependencies:
  get_orm: ^版本号

然后运行 flutter pub get 来安装依赖。


初始化数据库

在使用 get_orm 之前,需要初始化数据库。这里我们以 SQLite 数据库为例:

import 'package:get/get.dart';
import 'package:get_orm/get_orm.dart';

class AppDatabase extends GetxService {
  // 创建数据库实例
  late final Database db;

  [@override](/user/override)
  Future<void> onReady() async {
    super.onReady();
    db = await openDatabase(
      'app.db', // 数据库文件名
      version: 1,
      onCreate: (db, version) async {
        // 创建表
        await db.execute('''
          CREATE TABLE IF NOT EXISTS users (
            id INTEGER PRIMARY KEY AUTOINCREMENT,
            name TEXT NOT NULL,
            age INTEGER
          );
        ''');
      },
    );
  }
}

使用 query builder 进行增删改查

1. 插入数据

void insertUser(String name, int age) async {
  final db = Get.find<AppDatabase>().db;
  await db.insert('users', {'name': name, 'age': age});
}

2. 查询数据

Future<List<Map<String, dynamic>>> getUsers() async {
  final db = Get.find<AppDatabase>().db;
  return await db.query('users');
}

3. 更新数据

void updateUser(int id, String name, int age) async {
  final db = Get.find<AppDatabase>().db;
  await db.update(
    'users',
    {'name': name, 'age': age},
    where: 'id = ?',
    whereArgs: [id],
  );
}

4. 删除数据

void deleteUser(int id) async {
  final db = Get.find<AppDatabase>().db;
  await db.delete('users', where: 'id = ?', whereArgs: [id]);
}

完整示例代码

import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:get_orm/get_orm.dart';

// 定义数据库服务
class AppDatabase extends GetxService {
  late final Database db;

  [@override](/user/override)
  Future<void> onReady() async {
    super.onReady();
    db = await openDatabase(
      'app.db',
      version: 1,
      onCreate: (db, version) async {
        await db.execute('''
          CREATE TABLE IF NOT EXISTS users (
            id INTEGER PRIMARY KEY AUTOINCREMENT,
            name TEXT NOT NULL,
            age INTEGER
          );
        ''');
      },
    );
  }
}

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return GetMaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('get_orm 示例')),
        body: Center(
          child: ElevatedButton(
            onPressed: () async {
              // 初始化数据库
              final database = Get.put(AppDatabase());

              // 插入数据
              await insertUser('张三', 25);

              // 查询数据
              final users = await getUsers();
              print(users);

              // 更新数据
              await updateUser(1, '李四', 30);

              // 删除数据
              await deleteUser(1);
            },
            child: Text('测试 get_orm'),
          ),
        ),
      ),
    );
  }
}

更多关于Flutter ORM框架插件get_orm的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter ORM框架插件get_orm的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


get_orm 是一个基于 GetX 的 Flutter ORM 框架插件,它简化了与数据库的交互,并提供了强大的查询功能。get_orm 支持多种数据库,如 SQLite、PostgreSQL、MySQL 等,并且与 GetX 的状态管理无缝集成。

以下是如何使用 get_orm 的基本步骤:

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 get_orm 依赖:

dependencies:
  flutter:
    sdk: flutter
  get_orm: ^0.0.1  # 请检查最新版本

然后运行 flutter pub get 来安装依赖。

2. 初始化数据库

在使用 get_orm 之前,你需要初始化数据库连接。以下是一个简单的 SQLite 数据库初始化示例:

import 'package:get_orm/get_orm.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化数据库
  await GetOrm.init(
    database: 'my_database.db',
    version: 1,
    onCreate: (db, version) {
      // 创建表
      db.execute('''
        CREATE TABLE users (
          id INTEGER PRIMARY KEY AUTOINCREMENT,
          name TEXT,
          age INTEGER
        )
      ''');
    },
  );

  runApp(MyApp());
}

3. 定义模型

接下来,你需要定义一个模型类来表示数据库中的表。get_orm 提供了 Model 基类来简化这一过程。

import 'package:get_orm/get_orm.dart';

class User extends Model {
  int? id;
  String? name;
  int? age;

  User({this.id, this.name, this.age});

  [@override](/user/override)
  Map<String, dynamic> toMap() {
    return {
      'id': id,
      'name': name,
      'age': age,
    };
  }

  [@override](/user/override)
  User fromMap(Map<String, dynamic> map) {
    return User(
      id: map['id'],
      name: map['name'],
      age: map['age'],
    );
  }
}

4. 数据库操作

现在你可以使用 get_orm 提供的 API 来执行数据库操作。

插入数据

final user = User(name: 'John Doe', age: 30);
await user.save();

查询数据

final users = await User().all();
for (var user in users) {
  print('User: ${user.name}, Age: ${user.age}');
}

更新数据

final user = await User().find(1);
user.name = 'Jane Doe';
await user.save();

删除数据

final user = await User().find(1);
await user.delete();

5. 使用查询构建器

get_orm 提供了强大的查询构建器,可以轻松构建复杂的查询。

final users = await User().where('age', '>', 25).orderBy('name').get();
for (var user in users) {
  print('User: ${user.name}, Age: ${user.age}');
}

6. 与 GetX 集成

get_ormGetX 的状态管理无缝集成。你可以使用 GetXObxGetBuilder 来监听数据变化并更新 UI。

class UserController extends GetxController {
  var users = <User>[].obs;

  [@override](/user/override)
  void onInit() {
    super.onInit();
    fetchUsers();
  }

  void fetchUsers() async {
    users.value = await User().all();
  }
}

在 UI 中使用:

class UserList extends StatelessWidget {
  final UserController controller = Get.put(UserController());

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Obx(() {
      return ListView.builder(
        itemCount: controller.users.length,
        itemBuilder: (context, index) {
          final user = controller.users[index];
          return ListTile(
            title: Text(user.name ?? ''),
            subtitle: Text('Age: ${user.age}'),
          );
        },
      );
    });
  }
}

7. 关闭数据库连接

在应用退出时,记得关闭数据库连接。

[@override](/user/override)
void dispose() {
  GetOrm.close();
  super.dispose();
}
回到顶部