Flutter floor数据库框架使用

  • Flutter floor数据库框架使用
    • 集成方法
    • 创建实体
    • 创建Dao
    • 创建数据库
    • 使用生成的代码
  • 插入更新删除操作
    • 插入@insert

Flutter floor数据库框架使用

集成方法

dependencies:flutter:sdk: flutterfloor: ^1.2.0 #数据库dev_dependencies:flutter_test:sdk: flutterfloor_generator: ^1.2.0build_runner: ^2.1.2

创建实体

@entity 标记这一个类是对应一个数据库表。
@primaryKey 用于标记这是数据表的主键

@Entity(tableName: "areas") //表名
class AreaResponseAreaList {@primaryKeyint? id;String? name;String? code;int? priceFlag;String? pinyin;
}

创建Dao

@dao
abstract class AreaResponseAreaListDao {@Query('SELECT * FROM areas')Future<List<AreaResponseAreaList>> findAllPersons();@Query('SELECT * FROM areas WHERE id = :id')Stream<AreaResponseAreaList?> findPersonById(int id);@insertFuture<void> insertAreas(List<AreaResponseAreaList> areaList);
}

创建数据库

文件名 AppDataBase.dart 需要与 part ‘AppDataBase.g.dart’ 中文件名保持一致,不然导致自动生成文件失败

import 'dart:async';part 'AppDataBase.g.dart'; // the generated code will be there@Database(version: 1, entities: [AreaResponseAreaList])
abstract class AppDataBase extends FloorDatabase {AreaResponseAreaListDao get areaResponseAreaListDao;
}

运行以下命令 flutter packages pub run build_runner build 自动生成文件,
如果需要在文件变动时,自动重新生成使用 flutter packages pub run build_runner watch
执行命令后生成 AppDataBase.g.dart 文件

使用生成的代码

包含创建、打开数据库,及dao生成的数据库操作代码

// GENERATED CODE - DO NOT MODIFY BY HANDpart of 'AppDataBase.dart';// **************************************************************************
// FloorGenerator
// **************************************************************************// ignore: avoid_classes_with_only_static_members
class $FloorAppDataBase {/// Creates a database builder for a persistent database./// Once a database is built, you should keep a reference to it and re-use it.static _$AppDataBaseBuilder databaseBuilder(String name) =>_$AppDataBaseBuilder(name);/// Creates a database builder for an in memory database./// Information stored in an in memory database disappears when the process is killed./// Once a database is built, you should keep a reference to it and re-use it.static _$AppDataBaseBuilder inMemoryDatabaseBuilder() =>_$AppDataBaseBuilder(null);
}class _$AppDataBaseBuilder {_$AppDataBaseBuilder(this.name);final String? name;final List<Migration> _migrations = [];Callback? _callback;/// Adds migrations to the builder._$AppDataBaseBuilder addMigrations(List<Migration> migrations) {_migrations.addAll(migrations);return this;}/// Adds a database [Callback] to the builder._$AppDataBaseBuilder addCallback(Callback callback) {_callback = callback;return this;}/// Creates the database and initializes it.Future<AppDataBase> build() async {final path = name != null? await sqfliteDatabaseFactory.getDatabasePath(name!): ':memory:';final database = _$AppDataBase();database.database = await database.open(path,_migrations,_callback,);return database;}
}class _$AppDataBase extends AppDataBase {_$AppDataBase([StreamController<String>? listener]) {changeListener = listener ?? StreamController<String>.broadcast();}AreaResponseAreaListDao? _areaResponseAreaListDaoInstance;Future<sqflite.Database> open(String path, List<Migration> migrations,[Callback? callback]) async {final databaseOptions = sqflite.OpenDatabaseOptions(version: 1,onConfigure: (database) async {await database.execute('PRAGMA foreign_keys = ON');await callback?.onConfigure?.call(database);},onOpen: (database) async {await callback?.onOpen?.call(database);},onUpgrade: (database, startVersion, endVersion) async {await MigrationAdapter.runMigrations(database, startVersion, endVersion, migrations);await callback?.onUpgrade?.call(database, startVersion, endVersion);},onCreate: (database, version) async {await database.execute('CREATE TABLE IF NOT EXISTS `areas` (`id` INTEGER, `name` TEXT, `code` TEXT, `priceFlag` INTEGER, `pinyin` TEXT, PRIMARY KEY (`id`))');await callback?.onCreate?.call(database, version);},);return sqfliteDatabaseFactory.openDatabase(path, options: databaseOptions);}@overrideAreaResponseAreaListDao get areaResponseAreaListDao {return _areaResponseAreaListDaoInstance ??=_$AreaResponseAreaListDao(database, changeListener);}
}class _$AreaResponseAreaListDao extends AreaResponseAreaListDao {_$AreaResponseAreaListDao(this.database, this.changeListener): _queryAdapter = QueryAdapter(database, changeListener),_areaResponseAreaListInsertionAdapter = InsertionAdapter(database,'areas',(AreaResponseAreaList item) => <String, Object?>{'id': item.id,'name': item.name,'code': item.code,'priceFlag': item.priceFlag,'pinyin': item.pinyin},changeListener);final sqflite.DatabaseExecutor database;final StreamController<String> changeListener;final QueryAdapter _queryAdapter;final InsertionAdapter<AreaResponseAreaList>_areaResponseAreaListInsertionAdapter;@overrideFuture<List<AreaResponseAreaList>> findAllPersons() async {return _queryAdapter.queryList('SELECT * FROM areas',mapper: (Map<String, Object?> row) => AreaResponseAreaList());}@overrideStream<AreaResponseAreaList?> findPersonById(int id) {return _queryAdapter.queryStream('SELECT * FROM areas WHERE id = ?1',mapper: (Map<String, Object?> row) => AreaResponseAreaList(),arguments: [id],queryableName: 'areas',isView: false);}@overrideFuture<void> insertAreas(List<AreaResponseAreaList> areaList) async {await _areaResponseAreaListInsertionAdapter.insertList(areaList, OnConflictStrategy.abort);}
}

使用生成的FloorAppDatabase类,它允许访问数据库构建器。该名称由FloorAppDatabase类,它允许访问数据库构建器。该名称由FloorAppDatabase类,它允许访问数据库构建器。该名称由Floor和数据库类名组成

传递给databaseBuilder()的字符串将是数据库文件名。

要初始化数据库,请调用build()并使用await确保结果。
根据数据库database获取到Dao就可以操作数据库了

  final String DB_NAME="Pad7_lxx";late final AppDataBase database;init() async {database = await $FloorAppDataBase.databaseBuilder(DB_NAME).build();database.areaResponseAreaListDao.findPersonById(id);}

插入更新删除操作

插入@insert

// 单个插入
@insert
Future<void> insertAreas(AreaResponseAreaList area);//插入多个
@insert
Future<void> insertAreas(List<AreaResponseAreaList> areaList);

flutter floor数据库框架使用相关推荐

  1. Android客户端开发—开源数据库框架LitePal

    LitePal是一款开源的Android数据库框架,采用对象关系映射(ORM)模式,将常用的数据库功能进行封装,不使用SQL语句就可以完成创建表以及表单的CRUD操作,并且很轻量级,几乎零配置.(它将 ...

  2. Java-ORM数据库框架CDM介绍

    cdm-core Cdm Framework 一个使用简单,零配置,容错率高,效率的Java™ ORM 数据库框架 ✨ 特性 使用简单 没有依赖,一行代码即可初始化连接,调用接口像使用脚本语言一样畅爽 ...

  3. Android 数据库框架ormlite 使用精要

    Android 数据库框架ormlite 使用精要 前言 本篇博客记录一下笔者在实际开发中使用到的一个数据库框架,这个可以让我们快速实现数据库操作,避免频繁手写sql,提高我们的开发效率,减少出错的机 ...

  4. php mysql 框架_Medoo 轻量级的 PHP 数据库框架 - 文章

    Medoo 是一个轻量级的PHP数据库框架,提高开发效率,Medoo 需要 PHP 支持 PDO 扩展,请在配置文件中开启 PDO 扩展. 为什么选择 Medoo 非常的轻量 未压缩只有 34KB. ...

  5. 安卓进阶系列-07数据库框架(GreenDAO)的使用

    GreenDAO的使用 简介 安卓提供了一个占用内存极小的数据库SQLite,也提供了不少操作数据库的API,然而不是所有程序员都擅长编写SQL语句,这时一个ORM的数据库框架就显得很好用了. 在之前 ...

  6. 安卓进阶系列-06数据库框架(LitePal)的使用

    LitePal的使用 背景 安卓内置了一个轻量数据库SQLite,然而很多时候使用SQLite是不方便的,更多开发者习惯服务器部署MySQL之类的数据库,而且复杂的SQL语言对于很多没有系统学习过数据 ...

  7. Medoo 开源项目发布,超轻量级的PHP SQL数据库框架

    Medoo是一款超轻量级的PHP SQL数据库框架,由社交网站Catfan和开源项目Qatrix的创始人黎言卓开发.提供了简单,易学,灵活的API,提升开发Web应用的效率与性能,而且体积只有8KB不 ...

  8. 19年8月 字母哥 第四章 常用web开发数据库框架 不要用公司网络加载不出来 用热点!!!

    第四章 常用web开发数据库框架 4.1.整合Spring JDBC操作数据 4.2 Spring JDBC多数据源的实现 4.3.Spring JDBC JTA实现分布式事务 4.4.ORM主流框架 ...

  9. 快速数据库框架_快速学习新的数据科学概念的框架

    快速数据库框架 重点 (Top highlight) 数据科学 (Data Science) Success in data science and software engineering depe ...

  10. android 开源 数据库,Android开源数据库框架-LitePal的使用

    简介 LitePal是一款开源的Android数据库框架,采用了关系映射的模式.LitePal在github上的项目地址:github.com/LitePalFram- 配置LitePal depen ...

最新文章

  1. 统治世界的 10 大算法,你知道几个?
  2. java tcp 三次握手_用Java代码分析TCP的三次握手四次挥手过程
  3. 第一届全国大学生智能汽车竞赛获奖名单
  4. BAT华为美团头条面试考什么?这份GitHub万星资源,告诉你面试题+答案+出题人分析...
  5. 智能实验室-全能优化(Guardio) 4.92.0.812
  6. Java中方法签名signature、方法重载以及“两同两小一大”的方法覆盖(方法重写)总结
  7. 二十八、深入浅出Python中的 logging模块
  8. VC++工程配置的大体流程 看图说话
  9. ImportError: DLL load failed: %1 不是有效的 Win32 应用程序
  10. ubuntu系统安装TP-Link无线网卡驱动
  11. Axure原型|天猫、京东、拉钩等网站banner原型分享
  12. linux系统进去是guest用户t,ubuntu普通用户变为root用户后,只能guest身份进系统(linux的权限问题)...
  13. 上项线体表位置_颅骨体表定位标志
  14. php基础教程推荐,php基础教程-绝对推荐
  15. 但使龙城飞将在,不教胡马度阴山
  16. 2022-2028全球与中国长寿和抗衰老治疗市场现状及未来发展趋势
  17. Linux系列文章 —— vim的基本操作(误入vim退出请先按「ESC」再按:q不保存退出,相关操作请阅读本文)
  18. 状态反馈极点配置控制器设计学习笔记
  19. 网络推广团队每天都在干什么?
  20. Django搭建个人博客:用django-notifications实现消息通知

热门文章

  1. Hadoop Yarn Linux Container Executor配置
  2. iOS-OC-提交审核:Missing Push Notification Entitlement
  3. QoS实现交换机带宽控制
  4. IB计算机科学选课,IB体系应如何正确选课?
  5. 大数据分析技术与应用
  6. datav(datav)
  7. windows live mail图片签名不显示图片
  8. 新一代至强CPU加速GBase 8a MPP,GBase GCDW云数据仓库助力行业迎接数字化转型新挑战
  9. 计算机系统感染了病毒怎么办,老司机教你电脑感染了病毒怎么解决
  10. 拳皇97用什么计算机语言编写,拳皇97这几个人物非常适合新手,用来打电脑可轻松通关...