数据库DBFlow应用场景及其分析java
先上一张效果图android
dbflow是一款android高性的ORM数据库.可使用在进行项目中有关数据库的操做。git
dbflow是Android SQLite ORM 的一个工具库。综合了 Active Android, Schematic, Ollie,Sprinkles 等库的优势;经过注解实现,性能好;能生成 ContentProvidergithub
根据DBFlow的源码来看,是分多个module的,有一个module叫作processor,这是编译时注解处理器Module,看到AbstractProcessor了吧,编译时注解处理器都须要继承这个类,可见DBFlow是编译时注解处理,在编译时就将表相关信息生成了,在编译的时候会把生成的java代码和你本身项目的代码打包到一块儿,在运行时,就能够调用这些代码了,不须要再写运行时注解处理器,避免反射机制带来的性能负担。sql
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()bash
开源: 整个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是我用过的数据库当中最好用的数据库,性能也很好,使用很是简单,高度推荐。
项目地址:
推荐文档
关于更多:
若是你以为此文对您有所帮助, 欢迎加入微信公众号:终端研发部