android 框架_Android 数据库框架 DBFlow 的使用

私信我或关注微信号:狮范儿,回复:学习,获取免费学习资源包。

DBFlow 是一个基于注解处理器开发的使用方便的 ORM Android 数据库,该库简化了很多多余的代码,并且提供了好用的 API 来处理与数据库的交互,让开发者专注 App 的开发。下面将从以下几个方面来学习 DBFlow 数据库框架的使用,具体如下:

  1. DBFlow 的优势
  2. 配置 DBFlow
  3. 创建数据库
  4. 创建表
  5. 插入数据
  6. 删除数据
  7. 更新数据
  8. 查询数据
  9. 案例
9df8fb2a5b821e4d7ccaca64fb1b7f1e.png

DBFlow的优势

DBFlow 借鉴了一些其他优秀数据库框架的特性,下面是 DBFlow 的优势,具体如下:

  1. Extensibility(扩展性):对表类的继承类没有限制,可以是一个普通的 JavaBean,使用时为了方便推荐表类继承 BaseModel 类你可以扩展不同包中的非模型类,并将它们用作数据库表,此外,你可以将其他表的子类加入到 @Column 中,并且它们可以位于不同的包中;
  2. Speed(速度):该库基于 Java 的注解处理器生成,使用它对运行时性能几乎没有任何影响(反射仅仅用于生数据库模块的生成),可以节省生成样板代码的时间,支持模型缓存(多主键模型),在可能的情况下比原生的 SQLite 速度要快,支持懒加载、@ForeignKey、@OneToMany等使得查询更有效率;
  3. SQLite Query Flow(SQLite查询流):DBFlow 的查询尽可能的贴近原生 SQLite 查询;
  4. Open Source(开源):开源地址见文末;
  5. Robust(健壮性):支持 Trigger, ModelView, Index, Migration 以及内置的管理数据库的方式, 此外,还支持 SQLCipher, RXJava 等;
  6. Multiple Databases, Multiple Modules(多数据库、多模型):无缝支持多数据库文件以及使用 DBFlow 的其他依赖中的数据库模型;
  7. Built On SQLite(基于 SQLite):SQLite 是世界上使用最广泛的数据库引擎,它不仅限于某个平台。

配置 DBFlow

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

1allprojects {2 repositories {3 jcenter()4 maven { url "https://jitpack.io" }5 }6}

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

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

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

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

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

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

 1/** 2 * 自定义Application 3 * @author jzman 4 * create at 2018/4/16 0016 17:28 5 */ 6public class MyApplication extends Application{ 7 @Override 8 public void onCreate() { 9 super.onCreate();10 //初始化DBFlow11 FlowManager.init(new FlowConfig.Builder(this).build());12 //设置日志显示13 FlowLog.setMinimumLoggingLevel(FlowLog.Level.V);14 }15}

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

1

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

创建数据库

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

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

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

创建表

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

 1/** 2 * NoteTable.java 3 * @author jzman 4 * create at 2018/4/17 0017 9:54 5 */ 6@Table(database = MyDatabase.class) 7public class NoteTable extends BaseModel { 8 @Column 9 @PrimaryKey10 int id;11 @Column12 private String title;13 @Column14 private String date;15 @Column16 private String content;1718 public String getTitle() {19 return title;20 }2122 public void setTitle(String title) {23 this.title = title;24 }2526 public String getDate() {27 return date;28 }2930 public void setDate(String date) {31 this.date = date;32 }3334 public String getContent() {35 return content;36 }3738 public void setContent(String content) {39 this.content = content;40 }41}

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

1java.lang.IllegalArgumentException: expected type but was null

插入数据

使用 DBFlow 插入数据常用的有二种方式,具体如下:

  1. model.insert()
  2. SQLite.insert()

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

 1/** 2 * 插入数据 3 * @param model 4 */ 5public void inseartData(NoteBean model){ 6 //1.model,insert() 7 model.setTitle("title"); 8 model.setDate("2018-04-17"); 9 model.setContent("content");10 model.insert();11 //2.SQLite.insert()12 SQLite.insert(NoteBean.class)13 .columns(NoteBean_Table.title,NoteBean_Table.date,NoteBean_Table.content)14 .values("title
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值