概述

DBFlow是一个基于AnnotationProcessing(注解处理器)的强大、健壮同时又简单的ORM框架。效率紧跟greenDAO其后。基于注解,使用apt技术,在编译过程中生成操作类,使用方式和ActiveAndroid高度相似,使用简单。

DBFlow官方教程

DBFlow的Github官方地址

导入DBFlow依赖

// DBFlow 数据库版本
def dbflow_version = "4.1.1"

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])

    implementation 'com.android.support:appcompat-v7:26.1.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.1'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'

    // 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}"
}

说明:这里是基本的使用依赖,如果需要kotlin、RXJava支持请到官网添加依赖。具体版本到官网查看。

初始化数据库

在application 的oncreat里面初始化

 // 初始化数据库
FlowManager.init(this);

创建数据库

@Database(name = AppDatabase.NAME, version = AppDatabase.VERSION)
public class AppDatabase {

    // 数据库名称
    public static final String NAME = "AppDatabase";

    // 数据版本
    public static final int VERSION = 1;
}

说明:创建一个数据库类,以基于注解的形式定义数据库名称和版本。

数据转换

@com.raizlabs.android.dbflow.annotation.TypeConverter
public class JSONConverter extends TypeConverter<String, JSONArray> {

    @Override
    public String getDBValue(JSONArray model) {
        return model == null ? null : model.toString();
    }

    @Override
    public JSONArray getModelValue(String data) {
        JSONArray jsonArray = null;
        try {
            jsonArray = new JSONArray(data);
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return jsonArray;
    }
}

创建表

@Table(database = AppDatabase.class)
public class UserEntity {

    @PrimaryKey(autoincrement = true)
    public int dbid;

    @Column
    public String icon;

    public int getDbid() {
        return dbid;
    }

    public void setDbid(int dbid) {
        this.dbid = dbid;
    }

    public String getIcon() {
        return icon;
    }

    public void setIcon(String icon) {
        this.icon = icon;
    }
}

说明:每张表的数据都有一个id主键,设置为自增长,数据库字段用@Column注解

数据库操作

//添加到数据库
ModelAdapter<UserEntity> modelAdapter = FlowManager.getModelAdapter(UserEntity.class);
modelAdapter.insert(userEntity);
//删除数据
ModelAdapter<UserEntity> modelAdapter = FlowManager.getModelAdapter(UserEntity.class);
modelAdapter.delete(userEntity);
//查询单个数据
UserEntity data = SQLite.select().from(UserEntity.class).where(UserEntity_Table.dbid.eq(1)).querySingle();
//查询全部数据
List<UserEntity> list = SQLite.select().from(UserEntity.class).queryList();

说明:每次修改表字段后在Bulid中的Make Project执行以下,如果app版本更新时修改了数据库就需要修改数据库版本,否则数据库会报错。 到此就已经成功实现DBFlow的简单操作了。感兴趣的可以去官方教程查看(上面贴了链接)。以后相关项目将会使用DBFlow,有相关深入将继续总结。