安卓ORM框架GreenDao的基本使用方法
1.项目引入
2.建立数据库
1.项目引入
在build.gradle(Project)的dependencies里加入
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' // add plugin
在build.gradle(APP)上方加入
apply plugin: 'org.greenrobot.greendao' // apply plugin
在dependencies中加入
implementation 'org.greenrobot:greendao:3.2.2' // add library
implementation 'net.zetetic:android-database-sqlcipher:3.5.9@aar'
2.建立数据库
2.1建立实体类,我们以Goods(商品)类为例
我们只需要新建这个类,并且在类的上方加上@Entity注解即可,然后重新make_project,GreenDao就会为我们生成下方的代码
@Entity
public class GoodsModel {
@Id(autoincrement = true)//设置id为主键,并且自增
private long id;
private Integer goodsId;
private String name;
private String icon;
private String info;
private String type;
@Generated(hash = 1830037561)
public GoodsModel(long id, Integer goodsId, String name, String icon,
String info, String type) {
this.id = id;
this.goodsId = goodsId;
this.name = name;
this.icon = icon;
this.info = info;
this.type = type;
}
@Generated(hash = 971639536)
public GoodsModel() {
}
public long getId() {
return this.id;
}
public void setId(long id) {
this.id = id;
}
public Integer getGoodsId() {
return this.goodsId;
}
public void setGoodsId(Integer goodsId) {
this.goodsId = goodsId;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public String getIcon() {
return this.icon;
}
public void setIcon(String icon) {
this.icon = icon;
}
public String getInfo() {
return this.info;
}
public void setInfo(String info) {
this.info = info;
}
public String getType() {
return this.type;
}
public void setType(String type) {
this.type = type;
}
}
2.2在myApplication中
/*
连接数据库并创建会话
*/
public class MyApplication extends Application
{
public static final String DB_NAME = "goods.dp";
public static final String DB_PASS = "123456";
public static DaoSession mDaoSession;
public static DaoMaster daoMaster;
public static DaoMaster.DevOpenHelper devOpenHelper;
@Override
public void onCreate() {
super.onCreate();
initDb();
}
/*
连接数据库并创建会话
*/
public void initDb()
{
//1.获取需要连接的数据库
devOpenHelper = new DaoMaster.DevOpenHelper(this,DB_NAME);
// SQLiteDatabase db = devOpenHelper.getWritableDatabase();//非加密数据库
Database database = devOpenHelper.getEncryptedReadableDb(DB_PASS);//加密数据库
//2.创建数据库连接
daoMaster = new DaoMaster(database);
//3.根据连接创建数据库会话
mDaoSession = daoMaster.newSession();
}
/*
关闭数据库连接
*/
public static void closeConnection()
{
if (devOpenHelper != null)
{
devOpenHelper.close();
devOpenHelper=null;
}
if (mDaoSession != null)
{
mDaoSession.clear();
mDaoSession=null;
}
}
}
3.对数据库的增删改查操作
在上文我们进行了makeproject操作后,GreenDao会帮我们生成一个叫做GoodsModelDao的类,我们通过对这个类的对象就可以对数据库进行操作。
我们新建一个GreenDaoManager的类:
public class GreenDaoManager
{
private Context context;
private GoodsModelDao mGoodModelDao;
private static GreenDaoManager greenDaoManager;
private DaoMaster daoMaster;
private DaoSession daoSession;
public GoodsModel goodsModel = new GoodsModel();
private GreenDaoManager(Context context) {
this.context = context;
mGoodModelDao = MyApplication.mDaoSession.getGoodsModelDao();
}
}
在初始化了mGoodModelDao 后,我们就可以利用mGoodModelDao进行CRUD操作
3.1插入数据
/**
* 添加数据到数据库,常用的有三种方式
*/
public void insertGoods()
{
//case1:插入一条数据,当指定主键已经存在时会发生错误
mGoodModelDao.insert(goodsModel);
//case2:插入一条数据,当指定主键存在时则进行替换,没有则进行插入
mGoodModelDao.insertOrReplace(goodsModel);
//case 3: 插入一条数据,判断数据的主键是否为空,若为空,则进行insert操作,否则进行update操作。
// 但若数据库中无此条主键所在的数据,则会执行失败
mGoodModelDao.save(goodsModel);
}
其中,save()方法的源码是:
public void save(T entity) {
if (hasKey(entity)) {
update(entity);
} else {
insert(entity);
}
}
3.2查询数据,查询数据的方法有很多,列举如下:
/**
* 从数据库查询数据
*/
public List<GoodsModel> quaryGoods( )
{
//查询全部数据
mGoodModelDao.loadAll();
//查询指定主键
mGoodModelDao.load(Long key);
//条件查询,名称等于奥利奥
mGoodModelDao.queryBuilder().where(GoodsModelDao.Properties.Name.eq("奥利奥")).list();
//条件查询,名称不等于奥利奥
mGoodModelDao.queryBuilder().where(GoodsModelDao.Properties.Name.notEq("奥利奥")).list();
//条件查询,id大于5的
mGoodModelDao.queryBuilder().where(GoodsModelDao.Properties.GoodsId.gt(5)).list();
//条件查询,id 大于等于5
mGoodModelDao.queryBuilder().where(GoodsModelDao.Properties.GoodsId.ge(5)).list();
//条件查询,id小于5
mGoodModelDao.queryBuilder().where(GoodsModelDao.Properties.GoodsId.lt(5)).list();
//条件查询,id小于等于5
mGoodModelDao.queryBuilder().where(GoodsModelDao.Properties.GoodsId.le(5)).list();
//模糊查询
mGoodModelDao.queryBuilder().where(GoodsModelDao.Properties.Name.like("奥利%")).list();
//查询区间内的数据
mGoodModelDao.queryBuilder().where(GoodsModelDao.Properties.GoodsId.between(5,10)).list();
//查询结果升序
mGoodModelDao.queryBuilder().where(GoodsModelDao.Properties.Name.like("奥利")).orderAsc(GoodsModelDao.Properties.GoodsId).list();
//查询结果降序
mGoodModelDao.queryBuilder().where(GoodsModelDao.Properties.Name.like("奥利%")).orderDesc(GoodsModelDao.Properties.GoodsId).list();
}
3.3更新数据
public void updateGoods(GoodsModel goodsModel)
{
mGoodModelDao.update(goodsModel);
}
3.4删除数据
public void deleteGoods(GoodsModel goodsModel)
{
//删除全部
mGoodModelDao.deleteAll();
//删除指定主键数据
mGoodModelDao.deleteByKey(Long key);
//删除某个实体对应的数据
mGoodModelDao.delete(goodsModel);
}
关于GreenDao的基本操作就是这些,具体的东西还是要结合项目进行灵活变通