GreenDAO 3.0
一、 简介
greenDao是一个开源项目,为了帮助Android开发者在sqlite中数据存储,SQLite是一个轻量级的关系型数据库。以下是最近查看各位大神文章总结的使用方式,多谢各路大神
二、 配置
1. 为主模块添加依赖,如下图所示。
2. 继续在同一文件中添加greendao Gradle Plugin 及greendao library,如下图所示。
schemaVersion---->指定数据库schema版本号,迁移等操作会用到
daoPackage------>指定通过greenDao服务插件生成的数据库代码文件的包名,默认为你的entity所在的包名
targetGenDir-------->数据库代码文件所在的目录,默认是“build/gererated/source/greenDao”,这里我们将其自定义到我们的Java目录中“src/main/java”方便查看和编辑,不配置的话将会保存在默认目录下。
除了这些属性之外,还有一些属性如下:
targetGenDirTest:设置生成单元测试目录。
generateTests:设置自动生成单元测试用例。
3. 创建一个entity(一个类对应一张表,一个属性对应一个列)
@Entity注解将Java类转换成数据库支持的实体,同时指导GreenDAO创建必需的代码。它支持配置日常的设置,使用方式如下图:
@Id:通过这个注解标记的字段必须是Lon/long类型的,这个字段在数据库中表示它就是主键
@Transient:表明这个字段不会被写入数据库,只是作为一个普通的java类字段,用来临时存储数据的,不会被持久化
其它属性见下图所示:
4. 执行Make Project
编译项目,User实体类会自动编译,生成get、set方法并且会在com.anye.greendao.gen目录下生成三个文件
三、 使用
1. 将Demo中的以下两个文件拷贝到模块中(不使用数据库升级功能请跳过此步骤)
修改HMROpenHelper文件,如下图所示
2. 初始化数据库,创建MyApplication类
“notes-db”是我们自定的数据库名字。一个DaoMaster就代表着一个数据库的连接;DaoSession可以让我们使用一些Entity的基本操作和获取Dao操作类,DaoSession可以创建多个,每一个都是属于同一个数据库连接的。
public class MyApplication extends Application {
private DaoMaster.DevOpenHelper mHelpter;
private SQLiteDatabase db;
private DaoMaster mDaoMaster;
private DaoSession mDaoSession;
public static MyApplication instances;
@Override public void onCreate() {
super.onCreate();
instances = this;
setDatabase();
}
public static MyApplication getInstances(){
return instances;
}
/**
* 设置greenDao
*/
private void setDatabase() {
// 通过 DaoMaster 的内部类 DevOpenHelper,你可以得到一个便利的 SQLiteOpenHelper 对象。
// 可能你已经注意到了,你并不需要去编写「CREATE TABLE」这样的 SQL 语句,因为 greenDAO 已经帮你做了。
// 注意:默认的 DaoMaster.DevOpenHelper 会在数据库升级时,删除所有的表,意味着这将导致数据的丢失。
// 所以,在正式的项目中,你还应该做一层封装,来实现数据库的安全升级。
mHelper = new DaoMaster.DevOpenHelper(this,"notes-db");
db = mHelper.getWritableDatabase();
// 注意:该数据库连接属于 DaoMaster,所以多个 Session 指的是相同的数据库连接。
mDaoMaster = new DaoMaster(db);
mDaoSession = mDaoMaster.newSession();
}
public DaoSession getDaoSession() {
return mDaoSession;
}
public SQLiteDatabase getDb() {
return db;
}
}
3. 更改MyApplicaton(不使用数据库升级请跳过此步骤)
将步骤2中
更改为
将
更改为
4. 获取数据库。在要使用数据库的位置添加如下语句
UserDao mUserDao =MyApplication.getInstances().getDaoSession().getUserDao();
SQL可能比较难写,而且只在运行时才能发现错误。QueryBuilder类让你不用SQL构建自定义查询,并帮你在编译时就发现错误。通过userDao的queryBuilder()方法,生成一个查找构造器,可以给构造器添加where条件判断、按照某某字段排序以及查询的条数等基本的数据库操作。list()方法表示查询的结果为一个集合。更多使用见第四部分参考文件
5. 增加
6. 删除
①基本操作:
②使用QueryBuilder:
7. 修改
①基本操作:
②使用QueryBuilder:
8. 查
①基本操作:
②使用QueryBuilder:
四、 数据库升级
1. 执行第三部分使用中的步骤1,3
2. 更改Entity(比如demo中的User类)。
3. 修改主模块的build.gradle文件中的版本号加1:
4. makeProject
5. 在手机上运行即可自动更新数据库。
6. 附:数据库升级原理:
使用DevOpenHelper打开数据库时,在它的onUpgrade方法中会调用以下两个方法:
这种方式意味着每次都重新创建数据库,所以数据不会报错。这种方式只适合开发人员调试用,在app上线后,数据库升级需要自己封装一个方法继承DaoMaster.OpenHelper,在本文中即HMROpenHelper.class类。在这个类中重写了OnUpgrade()方法:
它调用了MigrationHelper.class类的migrate方法,这个类用于数据库升级过程中先将原表改名为临时表,再新建新表,最后将临时表的数据导入新表并删除临时表:
五、 参考文件
配置参考:http://www.jianshu.com/p/4986100eff90
更多种注解参考:http://blog.csdn.net/bugproof/article/details/52074959
QuerBuilder增删改查参考:
http://blog.csdn.net/njweiyukun/article/details/51893092
QueryBuilder更多使用方法参考:http://blog.csdn.net/a284266978/article/details/44983927
GreenDAO官网:http://greenrobot.org/
数据库升级参考:http://www.tuicool.com/articles/VJ7bAnu
结束语:本文demo会随后在评论中附上:)