在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") }) ListcontactionBeanList; @ToMany(joinProperties = { @JoinProperty(name = "fromUserName", referencedName = "msgFromUserName") }) List 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的简单使用。