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數據庫的簡單使用