原文首发于微信公众号:jzman-blog,欢迎关注交流!

DBFlow 是一个基于注解处理器开发的使用方便的 ORM Android 数据库,该库简化了很多多余的代码,并且提供了好用的 API 来处理与数据库的交互,让开发者专注 App 的开发。下面将从以下几个方面来学习 DBFlow 数据库框架的使用,具体如下:
1. DBFlow 的优势
2. 配置 DBFlow
3. 创建数据库
4. 创建表
5. 插入数据
6. 删除数据
7. 更新数据
8. 查询数据
9. 案例

DBFlow 的优势

DBFlow 借鉴了一些其他优秀数据库框架的特性,下面是 DBFlow 的优势,具体如下:
1. Extensibility(扩展性):对表类的继承类没有限制,可以是一个普通的 JavaBean,使用时为了方便推荐表类继承 BaseModel 类你可以扩展不同包中的非模型类,并将它们用作数据库表,此外,你可以将其他表的子类加入到 @Column 中,并且它们可以位于不同的包中。
2. Speed(速度):该库基于 Java 的注解处理器生成,使用它对运行时性能几乎没有任何影响(反射仅仅用于生数据库模块的生成),可以节省生成样板代码的时间,支持模型缓存(多主键模型),在可能的情况下比原生的 SQLite 速度要快,支持懒加载、@ForeignKey、@OneToMany等使得查询更有效率。
3. SQLite Query Flow(SQLite查询流):DBFlow 的查询尽可能的贴近原生 SQLite 查询,如:

select(name, screenSize).from(Android.class).where(name.is("Nexus 5x")).and(version.is(6.0)).querySingle()
  1. Open Source(开源):DBFlow 时开源的,开源地址:Github
  2. Robust(健壮性):支持 Trigger, ModelView, Index, Migration 以及内置的管理数据库的方式, 此外,还支持 SQLCipher, RXJava 等
  3. Multiple Databases, Multiple Modules(多数据库、多模型):无缝支持多数据库文件以及使用 DBFlow 的其他依赖中的数据库模型
  4. Built On SQLite(基于 SQLite):SQLite 是世界上使用最广泛的数据库引擎,它不仅限于某个平台。

配置 DBFlow

因为 DBFlow 任然不是官方发布的,你需要在项目的 build.gradle 文件中进行如下配置,具体如下:

allprojects {repositories {jcenter()maven { url "https://jitpack.io" }}
}

然后,在 Module 对应的 build.gradle 文件中添加依赖,具体如下:

//为了方便可使用 def 关键字定义版本号
def dbFlow_version = "4.2.4"
dependencies {//...annotationProcessor "com.github.Raizlabs.DBFlow:dbflow-processor:${dbFlow_version}"compile "com.github.Raizlabs.DBFlow:dbflow-core:${dbFlow_version}"compile "com.github.Raizlabs.DBFlow:dbflow:${dbFlow_version}"
}

上面代码中的依赖只是针对于 Java,如果你要使用 Kotlin、RxJava 等要配置相对应的依赖即可。

注意:升级新版本的 DBFlow 时,一定要删除旧版本的依赖,因为新旧版本的注解处理器可能不同,如果未移除旧版本,将会报如下错误,具体如下:

java.lang.NoSuchMethodError: com.raizlabs.android.dbflow.annotation.Table.tableName()Ljava/lang/String

然后,自定义 Application ,在相应的 onCreate() 方法中初始化 DBFlow,具体如下:

/*** 自定义Application* @author jzman* create at 2018/4/16 0016 17:28*/
public class MyApplication extends Application{@Overridepublic void onCreate() {super.onCreate();//初始化DBFlowFlowManager.init(new FlowConfig.Builder(this).build());//设置日志显示FlowLog.setMinimumLoggingLevel(FlowLog.Level.V);}
}

最后,在 AndroidManifest.xml 文件中使用自定义的 Application,具体如下:

<applicationandroid:name=".app.MyApplication"// ...
</application>

此时,DBFlow 就引入当前项目中咯。

创建数据库

创建一个类并使用 @Database 注解来定义自己的数据库,该类应该要定义数据库的名称和数据库的版本,具体如下:

/*** MyDatabase* @author jzman* create at 2018/4/17 0017 9:08*/
@Database(name = MyDatabase.NAME, version = MyDatabase.VERSION)
public class MyDatabase {//数据库名称public static final String NAME = "MyDatabase";//数据库版本号public static final int VERSION = 1;
}

注意:如果以后要修改任意表的结构,为避免与旧版本数据库冲突一定要修改版本号,且保证版本号只升不降。

创建表

在已经创建好数据库的前提下就可以创建表了,表的模型类一般需要继承 BaseModel,并为模型类中的每个字段添加 @Column 注解,该注解将映射模型类的字段到对应表中的列,定义一张表具体如下:

/*** NoteTable.java* @author jzman* create at 2018/4/17 0017 9:54*/
@Table(database = MyDatabase.class)
public class NoteTable extends BaseModel {@Column@PrimaryKeyint id;@Columnprivate String title;@Columnprivate String date;@Columnprivate String content;public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public String getDate() {return date;}public void setDate(String date) {this.date = date;}public String getContent() {return content;}public void setContent(String content) {this.content = content;}
}

注意:在一张表中至少必须定义一个字段作为主键(primary key),如果模型类中某个字段是私有的,一定要定义相应的 getter、setter 方法,否则会在创建表的环节失败,表的命名要使用驼峰命名法,否则可能会出现如此下问题:

java.lang.IllegalArgumentException: expected type but was null

插入数据

使用 DBFlow 插入数据常用的有二种方式,具体如下:
1. model.insert()
2. SQLite.insert()

前者用于单个模型类对象的的插入,创建完具体的对象后,调用 model.insert() 即可插入该对象所对应的记录;后者使用 SQLite Wrapper Language 来插入数据,类似于原生的 insert 语句,支持多列数据的插入,使用起来比较方便,具体参考如下:

/*** 插入数据* @param model*/
public void inseartData(NoteBean model){//1.model,insert()model.setTitle("title");model.setDate("2018-04-17");model.setContent("content");model.insert();//2.SQLite.insert()SQLite.insert(NoteBean.class).columns(NoteBean_Table.title,NoteBean_Table.date,NoteBean_Table.content).values("title","2018-04-17","content").execute();
}

删除数据

使用 DBFlow 删除数据常用的有二种方式,具体如下:
1. model.delete():删除某条记录
2. SQLite.delete():根据条件删除

前者用于单个模型类对象的的删除,创建完具体的对象后,调用 model.delete() 即可删除该对象所对应的记录;后者使用 SQLite Wrapper Language 来条件删除数据,类似于原生的 delete 语句,使用起来比较方便,具体参考如下:

/*** 删除数据* @param model*/
public void deleteData(NoteBean model){//1.model.delete()model.delete();//2.SQLite.delete()SQLite.delete(NoteBean.class).where(NoteBean_Table.title.is("title")).and(NoteBean_Table.id.is(10)).async().execute();//删除整张表Delete.table(NoteBean.class);//删除多张表Delete.table(NoteBean.class,NoteBean1.class);
}

更新数据

使用 DBFlow 删除数据常用的有二种方式,具体如下:
1. model.update():更新某条记录
2. SQLite.update():根据条件更新某条记录

前者用于单个模型类对象的的更新,创建完具体的对象后,调用 model.update() 即可更新该对象所对应的记录;后者使用 SQLite Wrapper Language 来条件删除数据,类似于原生的 update 语句,使用起来比较方便,具体参考如下:

/*** 更新数据* @param model*/
public void updateData(NoteBean model) {//1.model.update()model.update();//2.SQLite.update()SQLite.update(NoteBean.class).set(NoteBean_Table.title.eq("title"),NoteBean_Table.content.eq("content")).where(NoteBean_Table.id.is(10)).async().execute();
}

查询数据

查询使用 SQLite.select() 方法,查询还有许多可以作为条件的关键字,这里就不在赘述了,下面是一个开发者做常用的查询,具体参考如下:

/*** 查询数据*/
public List<NoteBean> queryData(){//根据条件查询List<NoteBean> noteBeans = SQLite.select().from(NoteBean.class).where(NoteBean_Table.title.is("title")).queryList();return noteBeans;
}

注意:对于插入、更新操作可以使用 model.save() 方法。

案例

上文中介绍了 DBFlow 的配置以及增删改查等基本操作,DbFlow 还有其他比较高级的用法,比如使用 Transactions 来进行数据的安全操作等,下面写一个简单的案例来结束对 DBFlow 的学习,具体效果如下:

更多关于 DBFlow 的知识请参考 DBFlow 的 GitBook 。

如果觉得对自己有帮助,可以关注微信公众号:jzman-blog,一起交流学习。

转载于:https://www.cnblogs.com/jzmanu/p/10284781.html

Android 数据库框架 DBFlow 的使用相关推荐

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

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

  2. Android数据库框架-----ORMLite 的基本用法

    ORMLite 是一款非要流行的Android平台上的数据库框架,性能优秀,代码简洁: 简述: 优点: 1.轻量级:2.使用简单,易上手:3.封装完善:4.文档全面. 缺点:1.基于反射,效率较低(本 ...

  3. Android数据库框架总结

    本文转自:http://blog.csdn.net/da_caoyuan/article/details/61414626 一:OrmLite 简述: 优点: 1.轻量级:2.使用简单,易上手:3.封 ...

  4. 使用反射+注解封装一个基于Sqlite极简的android数据库框架

    数据库 背景 GreenDao 封装 创建数据库 对象映射表 数据库操作 扩展 总结 背景 目前市面上已经有比较好用的数据库框架,比如GreenDao和OrmLite,而且功能也很齐全,那为什么还要多 ...

  5. Android数据库框架-ORMLite

    参考资料 Android ORMLite 框架的入门用法 Android 快速开发系列 ORMLite 框架最佳实践 添加依赖 compile 'com.j256.ormlite:ormlite-an ...

  6. Android 数据库框架ormlite 使用精要,万字总结

    先说说优点 1. 轻量级 2. 使用简单,易上手 3. 封装完善 4. 文档全面 缺点 1. 基于反射,效率较低 2. 缺少中文翻译文档 如何使用? 导入jar包到项目libs文件夹下 到http:/ ...

  7. Android 数据库框架ormlite 使用

    ormlite是什么? 首先可以去它的官网看看www.ormlite.com,它的英文全称是Object Relational Mapping,意思是对象关系映射:如果接触过Java EE开发的,一定 ...

  8. android mysql代码_LitePal——Android数据库框架完整使用手册(示例代码)

    LitePal for Android LitePal是一个开源的Android库,使开发人员使用SQLite数据库非常简单.您无需编写任何SQL语句就可以完成大部分数据库操作,包括创建或升级表,增. ...

  9. Android数据库框架-GreenDao入门,阿里P8架构师Android大厂面试题总结

    // in the individual module build.gradle files } } 之后点击Sync Project 2.2. 在app的build.gradle中配置 apply ...

最新文章

  1. bootsrap学习
  2. 如何更好地利用Pmd、Findbugs和CheckStyle分析结果
  3. A Self-Attention Setentence Embedding 阅读笔记
  4. 算法与数据结构——并查集
  5. Windows下深度学习标注工具LabelImg安装和使用指南
  6. python 读取excel表数据_5分钟学会用Python 读取Excel
  7. python中list最大值_【Python实践-5】使用迭代查找一个list中最小和最大值
  8. 金蝶K3运行时错误-2147467238(8000401a)Automation错误
  9. 零基础学python-2.17 文件、open()、file()
  10. 形容等待时间长的句子_形容等待了很久的句子
  11. Task watchdog got triggered错误
  12. 一文说尽NB—IOT和Lora
  13. 基于 WebGL 的 3D Chart 图表
  14. ddd+kgdb调试内核
  15. 授权管理-LDAP-介绍与环境搭建
  16. 定了!考研人务必抓紧!2023考研全程资料免费分享微信大群!全网开启!
  17. 大专网页设计大作业-开源
  18. python循环里使用len()与计算出len()后速度有区别吗
  19. 华为机试(扑克牌大小3.3)
  20. 给广大在电脑前工作的同胞们的一点健康建议

热门文章

  1. python字符串的切片方式是[n、m、不包括m_python字符串的操作(去掉空格strip(),切片,查找,连接join(),分割split(),转换首字母大写, 转换字母大小写...)...
  2. linux 一次执行多条命令
  3. Spring的IOC容器为什么用反射而不用new来创建实例?
  4. java删除指定目录下文件_Java中循环删除指定目录下的文件
  5. Python精通-运算符与基本数据类型(三)
  6. Dubbo源码分析系列之-深入Dubbo扩展机制
  7. ConcurrentProgramming:interrupt
  8. redis之事务主从复制
  9. 关于snowflake算法的几个问题
  10. ios平台实现局域网ip扫描