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数据库的简单使用的主要内容,如果未能解决你的问题,请参考以下文章

GreenDao数据库的简单使用

Android实战——GreenDao3.2的使用,爱不释手

GreenDAO 真正简单的查询

Android实战——GreenDao3.2的使用,爱不释手

安卓GreenDao(基础)

GreenDao使用