Gradle配置
//在Project的build.gradle添加依赖
buildscript {
dependencies {
classpath 'com.android.tools.build:gradle:2.2.3'
//GreenDao3.2依赖
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.1'
}
}
//在Module的build.gradle添加依赖
apply plugin: 'org.greenrobot.greendao'
greendao {
//版本号、升级时可配置
schemaVersion 1
//设置DaoMaster、DaoSession、Dao包名
daoPackage 'com.yi.greendao'
//设置DaoMaster、DaoSession、Dao目录
targetGenDir 'src/main/java'
}
常用注解说明
@Entity:告诉GreenDao该对象为实体,只有被@Entity注释的Bean类才能被dao类操作
@Id:对象的Id,使用Long类型作为EntityId,否则会报错。(autoincrement = true)表示主键会自增
@Property:设置一个非默认关系映射所对应的列名,默认是使用字段名,例如:@Property(nameInDb = “name”)
@NotNull:设置当前列不能为空
@Transient:使用该注释的属性不会被存入数据库的字段中
@Unique:该属性值必须是唯一值
@Generated:编译后自动生成的构造函数、方法等的注释,提示构造函数、方法等不能被修改
创建实体类
@Entity
public class User{
@Id(autoincrement = true)
private Long id;
@Unique
private String phone;
@Property(nameInDb = "dbname")
private String name;
private int age;
}
创建完成后,点击Build- ->Make Project,自动生成代码:
1、Bean实体的构造方法和get、set方法。
2、DaoMaster、DaoSession、Dao三个类。
数据库初始化
public class GreenDaoHelper {
private static DaoMaster.DevOpenHelper devOpenHelper;
private static SQLiteDatabase database;
private static DaoMaster daoMaster;
private static DaoSession daoSession;
//单例模式
private static GreenDaoHelper mInstance;
private GreenDaoHelper() {
//初始化建议放在Application中进行
if (mInstance == null) {
//创建数据库"info.db"
devOpenHelper = new DaoMaster.DevOpenHelper(MyApplication.getContext(), "info.db", null);
//获取可写数据库
database = devOpenHelper.getWritableDatabase();
//获取数据库对象
daoMaster = new DaoMaster(database);
//获取Dao对象管理者
daoSession = daoMaster.newSession();
}
}
public static GreenDaoHelper getInstance() {
if (mInstance == null) {
//保证异步处理安全操作
synchronized (GreenDaoHelper.class) {
if (mInstance == null) {
mInstance = new GreenDaoHelper();
}
}
}
return mInstance;
}
public DaoMaster getDaoMaster() {
return daoMaster;
}
public DaoSession getDaoSession() {
return daoSession;
}
}
说明:
1、DevOpenHelper:创建SQLite数据库的SQLiteOpenHelper的具体实现。
2、DaoMaster:GreenDao的顶级对象,作为数据库对象、用于创建表和删除表。
3、DaoSession:管理所有的Dao对象,Dao对象中存在着增删改查等API。
数据库的增删改查
public class MyUserDao {
/**
* 添加数据,如果有重复则覆盖
*
* @param user
*/
public static void insertData(User user){
GreenDaoHelper.getInstance().getDaoSession().getUserDao().insertOrReplace(user);
}
/**
* 删除id等于参数的对象
*
* @param id
*/
public static void deleteData(long id) {
GreenDaoHelper.getInstance().getDaoSession().getUserDao().deleteByKey(id);
}
/**
* 删除全部数据
*/
public static void deleteAll() {
GreenDaoHelper.getInstance().getDaoSession().getUserDao().deleteAll();
}
/**
* 修改数据
*
* @param user
*/
public static void updateData(User user) {
GreenDaoHelper.getInstance().getDaoSession().getUserDao().update(user);
}
/**
* 查询id小于参数的对象
*
* @param id
* @return
*/
public static User queryData(long id) {
return GreenDaoHelper.getInstance().getDaoSession().getUserDao()
.queryBuilder().where(UserDao.Properties.Id.eq(id)).build().unique();
}
/**
* 查询id小于参数的集合
*
* @param id
* @return
*/
public static List<User> queryDatas(long id) {
return GreenDaoHelper.getInstance().getDaoSession().getUserDao()
.queryBuilder().where(UserDao.Properties.Id.le(id)).build().list();
}
/**
* 查询全部数据
*/
public static List<User> queryAll() {
return GreenDaoHelper.getInstance().getDaoSession().getUserDao().loadAll();
}