DBFlow
偶然发现的DBFlow ORM库,它的很多特性我很喜欢。
刚开始接触的大家可能会发现它的接口和ActiveAndroid很相似,使用一个全局单例进行操作而没有专门的Dao,但DBFlow采用的是模板代码生成的方式进行数据操作,相比于使用反射的ActiveAndroid,在性能有着绝对的优势。
而相比于同样使用模板代码生成的GreenDao,它不需要单独建立一个纯java的程序,并通过代码描述表结构。它采用了更加清晰简洁的注解加注解处理器(AnnotationProcessing)的技术生成表结构。使用更简洁,但又有着不相上下的高性能。DBFlow还有着许多有趣、简单而又强大的功能,希望你能喜欢上它。
目前DBFlow的中文的介绍和教程几乎没有,所以决定汉化此教程。但本人英语水平有限,如有勘误,欢迎大家指正。
DBFlow是一个基于AnnotationProcessing(注解处理器)的强大、健壮同时又简单的ORM框架。
此框架设计为了速度、性能和可用性。消除了大量死板的数据库代码,取而代之的是强大而又简介的API接口。
DBFlow使数据库的操作变得简洁而稳定,让您能够更专注地编写令人惊讶的APP。
为什么使用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使你不需要被限制在某些平台上。
更新日志
跟踪我们的进度、查看每次的版本的更新内容: releases tab
for older changes, from other xx.xx versions, check it out here
引入到你的工程
我们需要先倒入 apt plugin 库到你的classpath,以启用AnnotationProcessing(注解处理器):
buildscript {
repositories {
// required for this library, don't use mavenCentral()
jcenter()
}
dependencies {
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
}
}
然后添加我们的托管仓库网址.
allProjects {
repositories {
maven { url "https://jitpack.io" }
}
}
最后即可添加我们的库到你项目级别的build.gradle文件中了:
apply plugin: 'com.neenbedankt.android-apt'
def dbflow_version = "3.0.0-beta2"
// or dbflow_version = "develop-SNAPSHOT" for grabbing latest dependency in your project on the develop branch
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}"
}
You can also specify a commit hash instead of develop-SNAPSHOT
to grab a specific commit.