Flutter数据库查询生成插件query_gen的使用

Flutter数据库查询生成插件query_gen的使用

query_gen

rtk-query-codegen 启发

这是一个基于OpenApi规范(json)生成Dart模型和HTTP客户端的命令行工具。

该工具目前不支持所有OpenApi功能(主要是没有枚举支持)。

如何使用

首先全局激活插件:

dart pub global activate query_gen

然后运行它:

query_gen --partOf api.dart --fromUrl http://localhost:5000/swagger/v1/swagger.json > ./api.g.dart

你需要创建一个文件来暴露生成的代码。例如:

// api.dart
library my_api;

import 'dart:convert';

import 'package:http/http.dart';

part 'api.g.dart';

class ApiClient extends BaseClient with QueryClient {
  final client = Client();

  @override
  Future<StreamedResponse> send(BaseRequest request) {
    return client.send(request);
  }
}

你可以自定义 send 方法以添加缓存、重试或认证等功能。

参数

  • --partOf <dart文件>: 要包含在其中的Dart文件Uri。
  • --fromUrl <url>: 从该URL下载OpenApi规范。
  • --fromFile <路径>: 从此路径读取OpenApi规范。

完整示例Demo

以下是一个完整的示例代码,展示了如何使用 query_gen 插件生成API客户端代码。

import 'dart:convert';

import 'package:http/http.dart';
import 'package:query_gen/query_gen.dart';

void main() async {
  // 从指定URL获取OpenApi规范
  var response = await get(Uri.parse('http://localhost:5000/swagger/v1/swagger.json'));
  
  // 解析获取到的数据
  var source = jsonDecode(response.body);
  
  // 创建QueryGenerator实例并生成代码
  var query = QueryGenerator(source);
  print(query.generate('api.g.dart'));
}

更多关于Flutter数据库查询生成插件query_gen的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter数据库查询生成插件query_gen的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


query_gen 是一个用于生成 Flutter 项目中的查询语句的代码生成插件。它可以帮助开发者自动生成与数据库交互的代码,减少手动编写重复的查询代码的工作量。query_gen 通常与 moordrift 等数据库库一起使用,这些库是 Flutter 中常用的关系型数据库管理工具。

使用步骤

  1. 添加依赖: 首先,你需要在 pubspec.yaml 文件中添加 query_genmoor(或 drift)的依赖。

    dependencies:
      flutter:
        sdk: flutter
      moor: ^4.4.0  # 或者 drift: ^1.0.0
      query_gen: ^1.0.0
    
    dev_dependencies:
      build_runner: ^2.0.0
      moor_generator: ^4.4.0  # 或者 drift_dev: ^1.0.0
    
  2. 定义数据库表: 使用 moordrift 定义数据库表和实体类。

    import 'package:moor/moor.dart';
    import 'package:query_gen/query_gen.dart';
    
    class Users extends Table {
      IntColumn get id => integer().autoIncrement()();
      TextColumn get name => text()();
      IntColumn get age => integer()();
    }
    
  3. 生成查询代码: 使用 query_gen 生成查询代码。你可以在实体类上添加注解来指定生成的查询方法。

    @UseQueryGen()
    class UserQuery extends TableQuery<Users> {
      UserQuery(QueryExecutor executor) : super(executor);
    }
    
  4. 运行代码生成: 使用 build_runner 生成代码。在终端中运行以下命令:

    flutter pub run build_runner build
    

    这将会生成一个名为 user_query.g.dart 的文件,其中包含了自动生成的查询方法。

  5. 使用生成的代码: 在你的 Flutter 项目中使用生成的查询方法。

    void main() async {
      final query = UserQuery(executor);
      final allUsers = await query.getAll();
      print(allUsers);
    }
    

生成的查询方法

query_gen 会自动生成一些常见的查询方法,例如:

  • getAll: 获取所有记录
  • getById: 根据 ID 获取记录
  • insert: 插入新记录
  • update: 更新记录
  • delete: 删除记录

你还可以通过添加自定义注解来生成特定的查询方法。

自定义查询

如果你需要更复杂的查询,可以在生成的查询类中添加自定义方法。

extension CustomUserQuery on UserQuery {
  Future<List<User>> getAdults() {
    return (select(users)..where((u) => u.age.gt(18))).get();
  }
}
回到顶部