GreenDao是Android中用来处理数据库操作的一个比较好用的ORM框架,使用它可以简化数据库操作的代码,这里记录一下AndroidStudio中使用GreenDao的方式:
(1)配置Greendao插件引入GreenDao的jar包
app目录下的build.gradle文件中添加配置
apply plugin: 'org.greenrobot.greendao'
dependencies {
compile 'org.greenrobot:greendao:3.1.1'
}
工程目录下的build.gradle文件中添加配置
buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.1.2' classpath 'org.greenrobot:greendao-gradle-plugin:3.1.1' } }
(2)配置DaoMaster,DaoSession和DAOS的生成目录
在app目录下的build.gradle文件中android节点下添加如下配置
greendao{
schemaVersion 1 //数据库版本号,进行数据库升级时使用
daoPackage 'com.thunisoft.zxlz.dao.bean'
targetGenDir 'src/main/java'
}
(3)编写数据库中表对应的实体bean,生成对应的DaoMaster,DaoSession和DAOS。例如:
假设我们需要建一个表用来记录"笔记",我们可以创建这样一个java类
<span style="color:#000000;">package com.thunisoft.zxlz.dao.bean;
import org.greenrobot.greendao.annotation.Entity;
import org.greenrobot.greendao.annotation.Id;
import org.greenrobot.greendao.annotation.Property;
import java.util.Date;
import org.greenrobot.greendao.annotation.Generated;
/**
* Created by Administrator on 2016-10-10.
*/
@Entity
public class Note {
@Id
private String bh;
@Property(nameInDb = "bt")
private String bt;
@Property(nameInDb = "nr")
private String nr;
@Property(nameInDb = "bxsj")
private Date bxsj;
}</span>
@Id 是指定表的主键。
@Property(nameInDb = "bt") 是指定在表中的字段名就是bt。
点击Android studio开发工具中菜单栏Build下的Make Project就会在你之前(2)指定的目录下生成DaoMaster,DaoSession和DAOS,如下图:
(4)在Application中进行初始化操作
<span style="color:#000000;">package com.thunisoft.zxlz;
import android.app.Application;
import android.database.sqlite.SQLiteDatabase;
import com.xmg.zxlz.dao.DaoMaster;
import com.xmg.zxlz.dao.DaoSession;
/**
* Created by Administrator on 2016-10-10.
*/
public class MyApplication extends Application{
private DaoSession daoSession;
@Override
public void onCreate() {
super.onCreate();
initDataBase();
}
private void initDataBase() {
DaoMaster.DevOpenHelper devOpenHelper=new DaoMaster.DevOpenHelper(this,"test-db");
SQLiteDatabase db=devOpenHelper.getWritableDatabase();
daoSession=new DaoMaster(db).newSession();
}
public DaoSession getDaoSession() {
return daoSession;
}
}</span>
初始化操作如果我们要使用就可以通过获取Application对象来获取到Daosession以获取到具体某个表的dao来对这个表进行增删改查操作
<span style="color:#000000;">private void test(){
NoteDao noteDao=((MyApplication)getApplication()).getDaoSession().getNoteDao();
Note note=new Note();
note.setBh("1323432");
noteDao.insert(note);</span>
<span style="color:#000000;">}</span>
(5)GreenDao数据库升级,在大多数情况下随着业务的变化,我们之前所创建的表可能也需要改变(比如添加一个字段啥的),这时我们需要考虑到旧数据如何保留的问题。
GreenDao在默认情况下的数据库升级是会将原来的表销毁重新创建的,这在DaoMaster类中的DevOpenHelper中的源码可以看到
<span style="color:#000000;">/** WARNING: Drops all table on Upgrade! Use only during development. */
public static class DevOpenHelper extends OpenHelper {
public DevOpenHelper(Context context, String name) {
super(context, name);
}
public DevOpenHelper(Context context, String name, CursorFactory factory) {
super(context, name, factory);
}
@Override
public void onUpgrade(Database db, int oldVersion, int newVersion) {
Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables");
dropAllTables(db, true);
onCreate(db);
}
}</span>
所以在做数据库升级的时候我们需要修改这部分代码,我们需要做两件事情
a.修改app目录下的build.gradle文件中greendao节点下的schemaVersion加1,重新Build——>Make Project.
b.修改DevOpenHelper中的数据库升级到逻辑代码:创建临时表;将原表中的数据拷贝到临时表;删除原表,将临时表的表名修改为原表的表名。(你可以写个utils啥的,在onUpgrade方法中调用。)