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.