最近公司的项目中需要使用到数据库,使用里GreenDao的数据库后,觉得非常好用,速度快,轻量级,代码简单,省略里写增删改查的代码,今天分享给大家。
认识GreenDao之前必须知道ORM(Object Relation Mapping对象关系映射),其表现形式就是通过GreenDao将数据库和Bean对象关联起来,其表现形式如下图
具体的实现过程如下:
1.添加依赖
(1)需要在项目(Project)的build.gradle中加入依赖:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath'com.android.tools.build:gradle:2.3.1'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
//GreenDao3.2依赖
classpath'org.greenrobot:greendao-gradle-plugin:3.2.1'
}
}
(2)在Moudle的build.gradle文件中添加依赖:
//使用greendao
applyplugin:'org.greenrobot.greendao'
添加依赖(dependencies)中:
//greendao3.2的依赖
compile'org.greenrobot:greendao:3.2.0'
(3)添加greendao的数据库配置:
greendao {
schemaVersion 1 //数据库版本号 每次升级数据库都需要改变版本,只能增加
daoPackage 'com.pacgename.greendao.gen' //设置DaoMaster、DaoSession、Dao包名
targetGenDir 'src/main/java' //设置DaoMaster、DaoSession、Dao目录
//targetGenDirTest:设置生成单元测试目录
//generateTests:设置自动生成单元测试用例
}
2.创建Entity类(相当于开发中的Bean类)
greendao采用注解来创建Entity类,创建完成之后build自己的Moudlle,会自动生成:
(1)Bean实体的构造方法和get、set方法
(2)DaoMaster、DaoSession、DAOS类 这里的类生成我们在Moudle的build.gradle中设置的
daoPackage路径
这里对Bean对象的注释进行解释
@Entity:告诉GreenDao该对象为实体,只有被@Entity注释的Bean类才能被dao类操作
@Id:对象的Id,使用Long类型作为EntityId,否则会报错。(autoincrement = true)表示主键会自增,如果false就会使用旧值
@Property:可以自定义字段名,注意外键不能使用该属性
@NotNull:属性不能为空
@Transient:使用该注释的属性不会被存入数据库的字段中
@Unique:该属性值必须在数据库中是唯一值
@Generated:编译后自动生成的构造函数、方法等的注释,提示构造函数、方法等不能被修改
3.创建数据库
在项目的Application的oncreate方法中,创建数据库。
DaoManager.getInstance().setupDatabase(this)
其中DaoManager在后面创建。
4.配置数据库
public class DaoManager {
public static DaoManager instance;
private DaoSession daoSession = null;
/**
* 配置数据库
*/
public void setupDatabase(Context context) {
//创建数据库shop.db"
DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(context, "goods.db", null);
//获取可写数据库
SQLiteDatabase db = helper.getWritableDatabase();
//获取数据库对象
DaoMaster daoMaster = new DaoMaster(db);
//获取Dao对象管理者
daoSession = daoMaster.newSession();
}
public DaoSession getDaoInstant() {
return daoSession;
}
public static DaoManager getInstance() {
if (instance == null) {
instance = new DaoManager();
}
return instance;
}
}
5.对数据库进行增删改查的操作
public class GreendaoHelper {
/**
* 添加数据,如果有重复则覆盖
*/
public static void insert(GoodsDetailModel goodsDetailModel) {
DaoManager.getInstance().getDaoInstant().getGoodsDetailModelDao().insertOrReplace(goodsDetailModel);
}
/**
* 删除数据
*/
public static void delete(GoodsDetailModel model) {
DaoManager.getInstance().getDaoInstant().getGoodsDetailModelDao().delete(model);
}
/**
* 删除s所有数据
*/
public static void deleteAll() {
DaoManager.getInstance().getDaoInstant().getGoodsDetailModelDao().deleteAll();
}
/**
* 更新数据
*/
public static void update(GoodsDetailModel goodsDetailModel) {
DaoManager.getInstance().getDaoInstant().getGoodsDetailModelDao().update(goodsDetailModel);
}
/**
* 查询条件为Type=TYPE_LOVE的数据
*
* @return
*/
public static List<GoodsDetailModel> query(String id) {
return DaoManager.getInstance().getDaoInstant().getGoodsDetailModelDao().queryBuilder().where(GoodsDetailModelDao.Properties.ProductId.eq(id)).list();
}
/**
* 查询全部数据
*/
public static List<GoodsDetailModel> queryAll() {
return DaoManager.getInstance().getDaoInstant().getGoodsDetailModelDao().loadAll();
}
}
其中的Model,大家可以根据自己的需求进行设置。
GreenDao的设置完成,大家可以在项目中进行使用了。