博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
好用的 Android 数据库 DBFlow
阅读量:6206 次
发布时间:2019-06-21

本文共 3791 字,大约阅读时间需要 12 分钟。

数据库DBFlow应用场景及其分析

先上一张效果图

dbflow定义

dbflow是一款android高性的ORM数据库.可以使用在进行项目中有关数据库的操作。

dbflow是Android SQLite ORM 的一个工具库。综合了 Active Android, Schematic, Ollie,Sprinkles 等库的优点;通过注解实现,性能好;能生成 ContentProvider

为什么要是用DBFlow

根据DBFlow的源码来看,是分多个module的,有一个module叫做processor,这是编译时注解处理器Module,看到AbstractProcessor了吧,编译时注解处理器都需要继承这个类,可见DBFlow是编译时注解处理,在编译时就将表相关信息生成了,在编译的时候会把生成的java代码和你自己项目的代码打包到一起,在运行时,就可以调用这些代码了,不需要再写运行时注解处理器,避免反射机制带来的性能负担。

DBFlow有何优势

DBFlow的设计吸取了其他很多ORM框架中好的特征,并将之做得更好。它很灵活,让你能更专注于App中真正需要关注的地方。不要让一个ORM库限制了你的思维,而是让代码在你的App中工作得更好。

扩展性: ORM所需的数据类只需要实现Model接口即可,而不需要必须继承一个类,同时为了方便,我们还是推荐继承BaseModel,这是Model接口的一个标准实现。这样你既可以通过继承一个来自其他包的非Model类来生成你的数据库表,也可以通过继承一个Model类并通过添加@Column注解的属性向表中自由添加列。这一切都是为了方便你的使用。

速度:DBFlow基于AnnotationProcessing(注解处理器),通过编译期代码生成,运行时对性能是零损耗的。通过模板来为你维护生成的代码。通过缓存和尽可能地重用对象,我们得到了比原生SQLite更快的速度。同时我们还支持懒加载(lazy-loading),比如对于@ForeignKey和@OneToMany,这使得我们有着更高效得查询效率。

SQLite查询流(SQLite Query Flow): DBFlow的查询语法尽可能地和SQL语句相似,使您能更快上手。select(name, screenSize).from(Android.class).where(name.is("Nexus 5x")).and(version.is(6.0)).querySingle()

开源: 整个DBFlow库都是开源的,而且也非常欢迎大家来为这个库贡献自己的力量。

Robust: 我们支持Trigger,ModelView,Index,Migration,所有的数据库操作都在同一个线程(线程安全),还有其他特性。

多数据库、多表单: 我们无缝支持多数据库文件,database modules using DBFlow in other dependencies, simultaneously.

基于SQLite: SQLite是世界上使用最广泛的数据库引擎,基于SQLite的DBFlow使你不需要被限制在某些平台上。

使用步骤(以最新的为例):

第一步 : 在Module级别的gradle中添加

apply plugin: 'com.neenbedankt.android-apt'def dbflow_version = "4.1.2"dependencies {    apt "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}"    // sql-cipher database encyrption (optional)    compile "com.github.Raizlabs.DBFlow:dbflow-sqlcipher:${dbflow_version}"}复制代码

第二步: 在项目级的gradle中添加

buildscript {    repositories {        jcenter()    }    dependencies {        classpath 'com.android.tools.build:gradle:2.3.2'        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'    }}allprojects {    repositories {        jcenter()        maven { url "https://www.jitpack.io" }    }}复制代码

第三步: 初始化

@Override    public void onCreate() {        super.onCreate();        FlowManager.init(new FlowConfig.Builder(this).build());//      FlowManager.init(this);//这句也可以初始化    }复制代码

第四步:配置数据库相关参数

@Database(name = AppDatabase.NAME, version = AppDatabase.VERSION)public final class AppDatabase {    //数据库名称    public static final String NAME = "AppDatabase";    //数据库版本号    public static final int VERSION = 1;}复制代码

第五步:新建数据库表

@Table(database = AppDatabase.class)public class Good extends BaseModel implements Serializable {    @Column    public String gName;    @Column    public String gDes;    @Column    public int num;    @PrimaryKey(autoincrement = true)//ID自增    public long id;    public String getgName() {        return gName;    }    public void setgName(String gName) {        this.gName = gName;    }    public String getgDes() {        return gDes;    }    public void setgDes(String gDes) {        this.gDes = gDes;    }    public int getNum() {        return num;    }    public void setNum(int num) {        this.num = num;    }    public long getId() {        return id;    }    public void setId(long id) {        this.id = id;    }}复制代码

androidStudio 报错

Plugin with id 'com.neenbedankt.android-apt' not found.复制代码
buildscript {    repositories {        jcenter()    }    dependencies {                classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'    }}复制代码

总结

总结:这篇文章只是简单介绍了DBFlow的基本功能使用,DBFlow还有很多很厉害的功能,比如多数据库支持、Powerful Model Caching等,而且还支持Kotlin语言(运行在Java虚拟机的新语言)。我只使用过greenDAO、activeAndroid、afinal、DBFlow数据库,所以在我看来,DBFlow是我用过的数据库当中最好用的数据库,性能也很好,使用非常简单,高度推荐。

项目地址:

推荐文档

项目地址:

文档介绍:

关于更多:

相信自己,没有做不到的,只有想不到的

如果你觉得此文对您有所帮助, 欢迎加入微信公众号:终端研发部

技术+职场

转载地址:http://mmqca.baihongyu.com/

你可能感兴趣的文章
详解 Discuz 的 PHP经典加密解密函数 authcode
查看>>
Oracle如何删除表中重复记录
查看>>
nginx 是如何处理访问请求的
查看>>
wget参数用法详解
查看>>
使用curl命令查看访问url的时间
查看>>
WinForm中跨线程操作控件
查看>>
CODING 敏捷实践完全指南
查看>>
下MFC中对象、句柄、ID之间的区别.
查看>>
如何构建Win32汇编的编程环境(ONEPROBLEM个人推荐)
查看>>
Asp.Net MVC 分页、检索、排序整体实现
查看>>
Flymeos插桩适配教程
查看>>
还在用PS磨皮去皱?看看如何用神经网络高度还原你的年轻容貌!
查看>>
大端模式与小端模式、网络字节顺序与主机字节顺序
查看>>
微信支付申请90%的商户都卡在这儿了,申请微信支付,商户功能设置详细说明...
查看>>
制作一款微信表情
查看>>
高仿Instagram 页面效果android特效
查看>>
我的友情链接
查看>>
Juniper 基于路由的×××
查看>>
HDU - 2018 - 母牛的故事(dp)
查看>>
如何查找JSP页面中的错误
查看>>