GreenDao数据库的简单使用
Posted wlwqnj
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GreenDao数据库的简单使用相关的知识,希望对你有一定的参考价值。
在app项目下的build.gradle中, 先添加插件 apply plugin: ‘org.greenrobot.greendao‘
再添加依赖包 compile ‘org.greenrobot:greendao:3.2.2‘
在project中的build.gradle中,添加仓库 repositories{ mavenCentral() } 在dependencies中添加依赖{ classpath ‘org.greenrobot:greendao-gradle-plugin:3.2.0‘ }
再添加一个全工程的仓库allprojects { repositories { jcenter() maven { url "https://jitpack.io" } } }
这样GreenDao依赖包中就添加完成了,接下来就是去创建数据库表,在表中添加数据。
有一个GreenDaoManager类,这个类提供一个session,通过这个对象得到表对象,然后去操作数据库。直接copy过去使用就可以了。
public class GreenDaoManager {
private DaoMaster mDaoMaster;
private DaoSession mDaoSession;
private static GreenDaoManager mInstance; //单例
private GreenDaoManager(){
DaoMaster.DevOpenHelper devOpenHelper = new
DaoMaster.DevOpenHelper(MyApplication.getContext(), "user-db", null);//此处为自己需要处理的表
mDaoMaster = new DaoMaster(devOpenHelper.getWritableDatabase());
mDaoSession = mDaoMaster.newSession();
}
public static GreenDaoManager getInstance() {
if (mInstance == null) {
synchronized (GreenDaoManager.class) {//保证异步处理安全操作
if (mInstance == null) {
mInstance = new GreenDaoManager();
}
}
}
return mInstance;
}
public DaoMaster getMaster() {
return mDaoMaster;
}
public DaoSession getSession() {
return mDaoSession;
}
public DaoSession getNewSession() {
mDaoSession = mDaoMaster.newSession();
return mDaoSession;
}
}
创建一个db文件夹,在文件夹中再创建一个dao文件夹, 在这里面就要写数据库对应的bean,GreenDaoManager也放到里面,比较容易找到
@Entity
public class UserBean {
@Id(autoincrement = true)
Long id;
@Unique
private String fromUserName;
@ToMany(joinProperties = {
@JoinProperty(name = "fromUserName", referencedName = "contactionFromUserName")
})
List<ContactionBean> contactionBeanList;
@ToMany(joinProperties = {
@JoinProperty(name = "fromUserName", referencedName = "msgFromUserName")
})
List<MsgBean> msgBeanList;
}
UserBean对应一个数据库中的一张表。 id的标注说明是主键, fromUserName的标注是不能重复, contactionBeanList,对应的是一个表,msgBeanList对应一个表,里面表字段对应的fromUserName和UserName中的fromUserName是对应的外键约束,可以关联查询两张表,是一对多的情况。
@Entity
public class MsgBean {
@Id(autoincrement = true)
Long id;
String msgFromUserName;
String groupMumber;
String msgType;
String msgID;
String toUserName;
String time;
String content;
String location;
String flag;
String sendFlag;
String sendOrReceiver;
}
@Entity
public class ContactionBean {
@Id(autoincrement = true)
Long id;
String contactionFromUserName;
String encryChatRoomId;
String headImgUrl;
String memberCount;
String nickName;
String remakeName;
String groupMumberUserName;
String groupMumberNickName;
String groupMumberDisplayName;
}
这是UserName对应的联系人表和消息表,@Entity一定要加
这些完成后,make一下工程,greendao就会自动帮我们生成set,get代码,并basedata文件夹下创建好数据库,和表。
使用:
因为插入数据是随时随地的,所以最好在Myapplication中配置GreenDaoManager,这样直接可以拿到数据库管理对象。
private static GreenDaoManager mGreenDaoManageer;
@Override
public void onCreate() {
super.onCreate();
mContext = this;
mGreenDaoManageer = GreenDaoManager.getInstance();
}
public static UserBeanDao getUserDao(){
return mGreenDaoManageer.getSession().getUserBeanDao();
}
public static MsgBeanDao getMsgDao(){
return mGreenDaoManageer.getSession().getMsgBeanDao();
}
public static ContactionBeanDao getContactionDao(){
return mGreenDaoManageer.getSession().getContactionBeanDao();
}
这样我就可以随时随地的通过MyApplication的static方法,拿到数据库的管理类了,对应上面三张表。
下面贴出我使用的添加,删除,修改,查找数据的方法,这边就比较简单,使用到的朋友自己研究一下就可以了。
添加: 分为两种,一种是添加一条数据,一种是添加一堆数据,添加一堆数据GreenDao使用了数据库事务,数据比较安全,而且添加比较快,数据量比较大的情况下,建议使用添加一堆数据的方法。
比如添加一个msg, MyApplication.getMsgDao().insert(msgBean); msgBean对应MsgBean对象。 数据通过set方法添加。
添加一堆数据, MyApplication.getContactionDao().insertInTx(contactionBeanList); 传递一个对应的集合进来就Ok了,他会把整个集合添加到里面。
正常使用会有MyApplication.getContactionDao().insertOrReplace() 这样一个方法,如果相同的字段,可以进行替换,而不是添加,例如有人创建表,字段不能重复。这样添加数据最好使用此方法,防止报错。
删除: 也分为两种,一种是删除全部数据,一种是删除一条或者符合条件的几条数据。
删除全部数据: MyApplication.getMsgDao().deleteAll();
删除对应的数据:是先查询到数据,查询到后,再去遍历删除数据;
如果删除一条数据:MyApplication.getMsgDao().delete(msgBean);
如果删除一堆数据:MyApplication.getMsgDao().deleteInTx(list);
修改: 修改和删除逻辑差不多,先查到数据,查到对应的数据后,通过对象中的set方法对数据进行修改,修改完成后通过update方法来修改数据库
如果修改一条数据: MyApplication.getMsgDao().update(msgBean);
如果修改一堆数据: MyApplication.getMsgDao().updateInTx(list);
查找: 先要得到数据表的查找对象 QueryBuilder<ContactionBean> contactionBeanQueryBuilder = MyApplication.getContactionDao().queryBuilder();
拿到这对象后,就可以用过where添加查找的条件,可以添加多个查找条件,排序,分组,都可以,查找的方法很多,里面封装的也比较全部,我只是简单的使用,如果复杂的使用需要大家自己研究,主要需要的到数据库表的查询对象。
contactionBeanQueryBuilder.where(ContactionBeanDao.Properties.ContactionFromUserName.eq(chatUsername),ContactionBeanDao.Properties.HeadImgUrl.isNotNull());
list = contactionBeanQueryBuilder.list();
list就是我们查询到的数据集合,如果只查询一条数据,那么集合的size就是1.
以上就是我的GreenDao的简单使用。
以上是关于GreenDao数据库的简单使用的主要内容,如果未能解决你的问题,请参考以下文章
Android实战——GreenDao3.2的使用,爱不释手