一、GreenDao3.0的配置
1、在build.gradle的根目录中添加如下代码
apply plugin: 'org.greenrobot.greendao'
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'org.greenrobot:greendao-gradle-plugin:3.0.0'
}
}
greendao {
//数据库的版本号,如果添加表,或者某表结构改变了要修改这个,否则,再次运行会报没有这个表或者没有这个列的错误
schemaVersion 1
//可以自己定义,存放Dao的路径
daoPackage 'com.trt.greendao.gen'
//生成数据库文件的目录,可以将生成的文件放到我们的java目录中,而不是build中,这样就不用额外的设置资源目录了
targetGenDir 'src/main/java'
}
2、在根目录dependencies下添加包的依赖
compile 'org.greenrobot:greendao:3.0.1'
compile 'org.greenrobot:greendao-generator:3.0.0'
二、开始使用
创建一个Person实体类并创建该表
@Entity
public class Person {
@Id
private Long id;
private String name;
private String sex;
private String address;
private String phone;
private String email;
@Transient
private String aa;
}
编译之后就会变成这个样子(多了set和get方法)
@Entity
public class Person {
@Id
private Long id;
private String name;
private String sex;
private String address;
private String phone;
private String email;
@Transient
private String aa;
public String getAddress() {
return this.address;
}
public void setAddress(String address) {
this.address = address;
}
public String getSex() {
return this.sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public Long getId() {
return this.id;
}
public void setId(Long id) {
this.id = id;
}
public String getPhone() {
return this.phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getEmail() {
return this.email;
}
public void setEmail(String email) {
this.email = email;
}
@Generated(hash = 1113691994)
public Person(Long id, String name, String sex, String address, String phone, String email) {
this.id = id;
this.name = name;
this.sex = sex;
this.address = address;
this.phone = phone;
this.email = email;
}
@Generated(hash = 1024547259)
public Person() {
}
}
同时看你的目录结构是不是多了你刚刚在build.gradle中写的那个目录
在该目录下可以看到多了三个文件
- DaoMaster
- DaoSession
- PersonDao
当你在此创建实体类的时候就会出现相应的xxXDao文件,而DaoMaster和DaoSession只有一份,但是里面的内容会不断的更新。
准备工作弄完了,那怎么得到想要的数据库和怎么操作呢?
写一个工具类用来获取xxXDao文件(xxXDao文件是进行操作的)
public class GreenDaoManager {
private static GreenDaoManager mInstance;
private DaoMaster mDaoMaster;
private DaoSession mDaoSession;
private GreenDaoManager() {
DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(MainApplication.getContext(),"数据库名称", null);
mDaoMaster = new DaoMaster(devOpenHelper.getWritableDatabase());
mDaoSession = mDaoMaster.newSession();
}
public static GreenDaoManager getInstance() {
if (mInstance == null) {
mInstance = new GreenDaoManager();
}
return mInstance;
}
public DaoSession getSession() {
return mDaoSession;
}
}
我们可以在Application中对数据库进行初始化
GreenDaoManager.getInstance();
三、得到xxXDao对象进行增删改查
1、得到xxXDao对象
PersonDao personDao = GreenDaoManager.getInstance().getSession().getPersonDao();
2、添加数据
Person person = new Person(1l,"美年","女","南京","15523439808","dddd");
//使用事务插入数据,若数据存在 就覆盖之前的内容(一般后缀带Tx的都是事务性操作)
personDao.insertOrReplaceInTx(person);
3、删除数据
PersonDao personDao = GreenDaoManager.getInstance().getSession().getPersonDao();
Person person = personDao.load(3l);
if(person!=null){
personDao.delete(person);
}
4、修改数据
PersonDao personDao = GreenDaoManager.getInstance().getSession().getPersonDao();
Person person = personDao.load(3l);
if(person!=null){
person.setName("呵呵");
}
//使用事务更新数据
personDao.updateInTx(person);
5、查找数据
//获取xxXDao对象
PersonDao personDao = GreenDaoManager.getInstance().getSession().getPersonDao();
//查询所有的数据
personDao.loadAll();
//根据key值查数据
personDao.load(1l);
//根据where条件查询数据,返回为List集合
personDao.queryBuilder().where(PersonDao.Properties.Sex.eq("男")).build().list();
//根据where条件查询数据,返回为一个
personDao.queryBuilder().where(PersonDao.Properties.Id.eq(1l)).build().unique();
四、greendao中的注解
1、 @Entity 定义实体
@nameInDb 在数据库中的名字,如不写则为实体中类名
@indexes 索引
@createInDb 是否创建表,默认为true,false时不创建
@schema 指定架构名称为实体
@active无论是更新生成都刷新2、@Id主键
3、@NotNull 不为null
4、@Unique 唯一约束
5、@ToMany一对多
6、@OrderBy 排序
7、@ToOne 一对一
8、 @Transient 不存储在数据库中
9、@generated 由greendao产生的构造函数或方法