android dbflow教程,Android高性能ORM数据库DBFlow入门教程

DBFlow,综合了 ActiveAndroid, Schematic, Ollie,Sprinkles 等库的优点。同时不是基于反射,所以性能也是非常高,效率紧跟greenDAO其后。基于注解,使用apt技术,在编译过程中生成操作类,使用方式和ActiveAndroid高度相似,使用简单。

特性:

1、无缝支持多个数据库;

2、使用annotation processing提高速度;

3、ModelContainer类库可以直接解析像JSON这样的数据;

4、增加灵活性的丰富接口。

DBFlow在国内可能用的人不是很多,所以中文介绍很少,所以就有了这篇文章,接下来就让我们一起学习DBFlow。

AAffA0nNPuCLAAAAAElFTkSuQmCC

一、引入依赖、初始化

需要引入apt和maven,配置项目的 build.gradlebuildscript {

repositories {

jcenter()

}

dependencies {

classpath 'com.android.tools.build:gradle:2.0.0-beta6'

classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'

}

}

allprojects {

repositories {

jcenter()

maven { url "https://jitpack.io" }

}

}

配置app的build.gradleapply plugin: 'com.android.application'apply plugin: 'com.neenbedankt.android-apt'def dbflow_version = "3.0.0-beta4"android {  compileSdkVersion 23

buildToolsVersion "23.0.2"

defaultConfig {    applicationId "cn.taoweiji.dbflowexample"

minSdkVersion 14

targetSdkVersion 23

versionCode 1

versionName "1.0"

}

buildTypes {    release {      minifyEnabled false

proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

}

}

}

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

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

需要在Application的onCreate对DBFlow进行初始化public class MyApplication extends Application {    @Override

public void onCreate() {        super.onCreate();

FlowManager.init(this);

}

}

记得修改AndroidManifest.xml

android:name=".MyApplication"../>

二、数据库创建、表创建

定义数据库

我这里定义了一个名称叫做AppDatabase的数据库,可以根据自己的喜欢进行定义。@Database(name = AppDatabase.NAME, version = AppDatabase.VERSION)public class AppDatabase {  //数据库名称

public static final String NAME = "AppDatabase";  //数据库版本号

public static final int VERSION = 1;

}

创建数据库对象

必须继承BaseModel,BaseModel包含了基本的数据库操作(save、delete、update、insert、exists),看下面代码可以发现这个表是关联上面定义的数据库,People的id是自增的id。@ModelContainer@Table(database = AppDatabase.class)public class People extends BaseModel {    //自增ID

@PrimaryKey(autoincrement = true)    public Long id;    @Column

public String name;    @Column

public int gender;

}

编写完数据表对象后,点击Android studio的build->Make Project(Mac的童鞋直接command+F9)就会使用apt进行了编译,

查看目录(我的people类放在cn.taoweiji.dbflowexample.db)

app/build/generated/source/apt/debug/cn/taoweiji/dbflowexample/db

就可以看到自动生成 People_Adapter、People_Container、People_Table,其中People_Table在后面使用有很大的作用,建议详细看看它的结构。

三、增删改

由于数据表对象继承了BaseModel,已经包含了很多的操作People people = new People();

people.name = "Wiki";

people.gender = 1;

people.save();//people.update();//people.delete();Log.e("Test", String.valueOf(people.id));

删除、更新等操作就自己体验,这里就不多说了。

四、查询//返回所有查询结果List peoples = new Select().from(People.class).queryList();//返回单个查询结果People people = new Select().from(People.class).querySingle();//查询gender = 1的所有PeopleList peoples2 = new Select().from(People.class).where(People_Table.gender.eq(1)).queryList();

DBFlow的查询方式借鉴ActiveAndroid的,但是比ActiveAndroid功能还要强大。

五、事务、批量保存

事务是一个数据必须具备的,如果保存10000条数据,一条一条保存必然是很慢的,所以就需要用到事务,批量保存。DBFlow的事务非常的强大,同时使用也很复杂,这里就简单介绍批量保存,更多内容请查看官方文档List peoples = new ArrayList<>();for (int i = 0; i 

People people = new People();

people.name = "Wiki";

people.gender = 1;

peoples.add(people);

}//实时保存,马上保存new SaveModelTransaction<>(ProcessModelInfo.withModels(peoples)).onExecute();//异步保存,使用异步,如果立刻查询可能无法查到结果//TransactionManager.getInstance().addTransaction(new SaveModelTransaction<>(ProcessModelInfo.withModels(peoples)));

六、数据库升级(增加表、增加字段等)

如果是新增表无需做特别的处理,直接修改AppDatabase的版本号即可。

如果需要新增字段,除了需要修改AppDatabase的版本号外,还需要做特殊的处理,DBFlow的描述是:Migrations。

例子:对People新增一个email字段

第1步,修改数据库版本号@Database(name = AppDatabase.NAME, version = AppDatabase.VERSION)public class AppDatabase {  //数据库名称

public static final String NAME = "AppDatabase";  //数据库版本号,这里修改2

public static final int VERSION = 2;

}

第2步,需要修改数据表对象结构,增加email@ModelContainer@Table(database = AppDatabase.class)public class People extends BaseModel {    //自增ID

@PrimaryKey(autoincrement = true)    public Long id;    @Column

public String name;    @Column

public int gender;    @Column

public String email;

}

第3步,执行第二步之后,需要build(Android studio的build->Make Project、Mac的童鞋直接command+F9),通过apt更新People_Table,接下来编写Migrations@Migration(version = 2, database = AppDatabase.class)public class Migration_2_People extends AlterTableMigration {    public Migration_2_People(Class table) {        super(table);

}    @Override

public void onPreMigrate() {

addColumn(SQLiteType.TEXT, People_Table.email.getNameAlias().getName());

}

}

类名可以更加自己喜欢定义,我个人的规则是,按照数据库版本号和需要更新的数据表来命名,需要注意是:version = 2

数据库升级就大功告成了。

总结

这篇文章只是简单介绍了DBFlow的基本功能使用,DBFlow还有很多很厉害的功能,比如多数据库支持、Powerful Model Caching等,而且还支持Kotlin语言(运行在Java虚拟机的新语言)。我只使用过greenDAO、activeAndroid、afinal、DBFlow数据库,所以在我看来,DBFlow是我用过的数据库当中最好用的数据库,性能也很好,使用非常简单,高度推荐。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值