greenDAO 优势
1、一个精简的库
2、性能最大化
3、内存开销最小化
4、易于使用的 APIs
5、对 Android 进行高度优化
Greendao3.0 最主要的三大改变:
- 换包名
- 实体注解
- 加密支持的优化
GreenDao 3.0使用:
GreenDao 3.0采用注解的方式来定义实体类,通过gradle插件生成相应的代码。
GreenDao3的配置:
3.0相比2.0的配置较为方便,不用新建Module等一系列操作,可以直接在build.gradle里配置并新建实体用添加注解的方式生成。
- 在app目录下的build文件中添加以下配置
applyplugin:'org.greenrobot.greendao'
在dependencies
中配置compile'org.greenrobot:greendao:3.2.0'
- 在Project目录下的build文件中添加如下配置
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.0'
}
}
- 自定义路径
greendao{
schemaVersion 2 //数据库schema版本,也可以理解为数据库版本号
daoPackage 'com.liujc.greendao.dao' //设置DaoMaster、DaoSession、Dao包名
targetGenDir 'src/main/java' //设置DaoMaster、DaoSession、Dao目录
}
- 创建一个User的实体类
@Entity
public classUser {
@Id(autoincrement=true)
privateLongid;
privateStringname;
private intage;
private booleanisBoy;
}
- MakeProject
编译项目,User
实体类会自动编译,生成get
、set
方法并且会在com.liujc.greendao.dao
目录下生成三个文件;
GreenDao使用
- 封装一个
GreenDaoManager
类
public class GreenDaoManager {
private DaoMaster mDaoMaster;
private DaoSession mDaoSession;
private static GreenDaoManager mInstance;//单例
private GreenDaoManager(){
if(mInstance==null) {
// DaoMaster.DevOpenHelper devOpenHelper = new
// DaoMaster.DevOpenHelper(MyApplication.getContext(), "database_name", null);//此处openhelper为自动生成开发所使用,发布版本需自定义
MySQLiteOpenHelper devOpenHelper =new
MySQLiteOpenHelper(newGreenDaoContext(),"database_name.db", null);//GreenDaoContext为创建数据库路径使用
mDaoMaster=newDaoMaster(devOpenHelper.getWritableDatabase());
mDaoSession=mDaoMaster.newSession();
}
}
public static GreenDaoManager getInstance() {
if(mInstance==null) {
synchronized(GreenDaoManager.class) {//保证异步处理安全操作
if(mInstance==null) {
mInstance=newGreenDaoManager();
}
}
}
return mInstance;
}
public DaoMaster getMaster() {
return mDaoMaster;
}
public DaoSession getSession() {
return mDaoSession;
}
public DaoSession getNewSession() {
mDaoSession=mDaoMaster.newSession();
return mDaoSession;
}
}
- 在
application
的Create
方法中调用GreenDaoManager.getInstance()
; - 获取
UserDao
对象:GreenDaoManager.getInstance().getSession().getUserDao()
; -
UserDao
的使用:
//插入数据:
private voidinsertdata(String name) {
User insertData =newUser(null,name,24, false);
getUserDao().insert(insertData);
}
//删除数据
getUserDao().deleteByKey(id);
//更改数据
private voidupdatadata(Long id) {
User user =newUser(id,"更改后的数据用户",22, true);
getUserDao().update(user);
}
//查询数据
private void querydata() {
List users = getUserDao().loadAll();
StringBuffer sb =newStringBuffer();
Log.i("tag","当前数量:"+ users.size());
for(inti =0;i < users.size();i++) {
Log.i("tag","结果:"+ users.get(i).getId() +","+ users.get(i).getName() +","+ users.get(i).getAge() +","+ users.get(i).getIsBoy() +";");
sb.append(users.get(i).getId() +","+ users.get(i).getName() +","+ users.get(i).getAge() +","+ users.get(i).getIsBoy() +";\n");
}
show_msg.setText(sb.toString());
}
greendao中的注解
- @Entity 定义实体
@nameInDb 在数据库中的名字,如不写则为实体中类名
@indexes 索引
@createInDb 是否创建表,默认为true,false时不创建
@schema 指定架构名称为实体
@active 无论是更新生成都刷新 - @Id
- @NotNull 不为null
- @Unique 唯一约束
- @ToMany 一对多
- @OrderBy 排序
- @ToOne 一对一
- @Transient 不存储在数据库中
- @generated 由greendao产生的构造函数或方法
下一篇主要讲述设置数据库路径以及数据库升级、数据迁移。