DBFlow是一个基于AnnotationProcessing(注解处理器)的强大、健壮同时又简单的ORM框架。
此框架设计为了速度、性能和可用性。消除了大量死板的数据库代码,取而代之的是强大而又简介的API接口。
DBFlow使数据库的操作变得简洁而稳定,让您能够更专注地编写令人惊讶的APP。
def dbflow_version = "3.0.0-beta2"
//DBFlow
annotationProcessor "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}"
compile "com.github.Raizlabs.DBFlow:dbflow-sqlcipher:${dbflow_version}"
maven { url "https://jitpack.io" }
这样就完成了,但是如果你看了官方文档的话一定有疑问因为官方文档还需要添加两个东西
//这是在项目build.gradle
buildscript {
repositories {
// required for this library, don't use mavenCentral()
jcenter()
}
dependencies {
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
}
}
//这是在app build.gradle中添加
apply plugin: 'com.neenbedankt.android-apt'
apt 'com.github.Raizlabs.DBFlow:dbflow-processor:${dbflow_version}'
然而博主按照官方文档添加后出现了这样的问题:
android-apt plugin is incompatible with the Android Gradle plugin. Please use 'annotationProcessor' configuration instead.
如果你按照官方文档出现了这样的问题请像下面这样配置:
//删除或注释这两句代码
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
apply plugin: 'com.neenbedankt.android-apt'
//然后把这句代码apt替换成annotationProcessor然后就不会出错啦
apt 'com.github.Raizlabs.DBFlow:dbflow-processor:${dbflow_version}'
public class MyApp extends Application {
@Override
public void onCreate() {
super.onCreate();
FlowManager.init(this);
}
}
@Database(name = SchoolDatabase.NAME,version = SchoolDatabase.VERSION)
public class SchoolDatabase {
//数据库名称
public static final String NAME = "Colonies";
//版本号
public static final int VERSION = 1;
}
新建 School类,并用注解 @Table 标注,指定它的数据库为 SchoolDatabase ;用 @PrimaryKey 标注 id 为主键,并且为自增长;用 @Column 标注 name 为表中的一列。
@Table(database = SchoolDatabase.class)
public class School extends BaseModel {
@PrimaryKey(autoincrement = true)
long id;
@Column
String name;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
这里我们继承的 BaseModel 是 DBFlow 给我们提供的,不是自己创建的 ,继承的目的官方文档的解释是:
每个与数据库连接的ORM对象类都必须继承Model接口。这是为了确保这些对象都能有相同的一些方法。通常为了方便我们继承BaseModel类,这个类也是Model的标准实现。
一个正确的数据表类需要以下几项:
列(Column)属性可以是private,但这样就必须指定公有public的getter和setter方法
温馨提示:创建完所需要的表后需要点击 AndroidStudio 的 Build -> Make Project 之后,这样你就可以在 app\build\generated\source\apt\debug 目录下找到生成的类 School_Table,在里面可以看到一些 SQL 语句。
private void insertData() {
School school = new School();
school.setName("xxxx学院");
school.save();
}
对于已经继承了 BaseModel 的 bean,我们可以直接 new 一个出来,给相应的属性赋值之后,直接调用 save() 方法,数据就保存完毕了,代码如下。
private void queryData() {
List list = SQLite.select().from(School.class).orderBy(School_Table.id,true)//排序
.queryList();
}
温馨提示:Product_Table 是 apt 给我们生成的,使用起来也很灵活易懂,当然其他的更为复杂的建议大家可以查看一下官方文档。
3. 更新数据
private void updateData() {
School school = SQLite.select().from(School.class).where(School_Table.id.eq(1111)).querySingle();
if (school.getName().equals("xxx")){
school.setName("1111");
}else {
school.setName("xxxx");
}
school.update();
}
这里我做了一个简单的判断我就不多说了
4. 删除数据
private void deleData() {
//第一种方法
// School school = SQLite.select().from(School.class).where(School_Table.name.eq("xxxx")).querySingle();
// Log.e(TAG,school.toString());
// school.delete();
//第二种方法
SQLite.delete(School.class).where(School_Table.name.eq("xxxxx")).execute();
}
以上就是DBFlow简单的操作,如果你还需继续探索可以参考下面学习链接
温馨提示:DBFlow博主目前还没有找到多表查询的操作虽然官网有说由于博主比较笨还没领悟到,其他操作可以参考:https://www.jianshu.com/p/0c017a715410