今天一大早收到GreenDao 3.0 正式發佈的消息,自從2014年接觸GreenDao至今,項目中一直使用GreenDao框架處理數據庫操做,本人使用數據庫路線 Sqlite---->OrmLite---->GreenDao。今天白天一直在忙着公司的項目需求,只能晚上加班來學習最新的GreenDao 3.0使用方式了。html
greenDAO是一個對象關係映射(ORM)的框架,可以提供一個接口經過操做對象的方式去操做關係型數據庫,它可以讓你操做數據庫時更簡單、更方便。以下圖所示:java
官網地址:http://greenrobot.org/greendao/git
github:https://github.com/greenrobot/greenDAOgithub
性能高,號稱Android最快的關係型數據庫數據庫
庫文件比較小,小於100K,編譯時間低,並且能夠避免65K方法限制app
支持數據庫加密 greendao支持SQLCipher進行數據庫加密 有關SQLCipher能夠參考這篇博客Android數據存儲之Sqlite採用SQLCipher數據庫加密實戰框架
使用過GreenDao的同窗都知道,3.0以前須要經過新建GreenDaoGenerator工程生成Java數據對象(實體)和DAO對象,很是的繁瑣並且也加大了使用成本。maven
GreenDao 3.0最大的變化就是採用註解的方式經過編譯方式生成Java數據對象和DAO對象。性能
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'org.greenrobot:greendao-gradle-plugin:3.0.0'
}
}
apply plugin: 'org.greenrobot.greendao'
dependencies {
compile 'org.greenrobot:greendao:3.0.1'
}
@Entity public class User { @Id private Long id; private String name; private int age; //下面省去了 setter/getter }
此時編譯一下自動生成DaoMaster 、DaoSession、Dao,如圖所示 默認位置:單元測試
好比上面想指定生成DaoMaster 、DaoSession、Dao位置
greendao {
targetGenDir 'src/main/java'
}
這裏聲明一個數據庫管理者單例
public class DBManager { private final static String dbName = "test_db"; private static DBManager mInstance; private DaoMaster.DevOpenHelper openHelper; private Context context; public DBManager(Context context) { this.context = context; openHelper = new DaoMaster.DevOpenHelper(context, dbName, null); } /** * 獲取單例引用 * * @param context * @return */ public static DBManager getInstance(Context context) { if (mInstance == null) { synchronized (DBManager.class) { if (mInstance == null) { mInstance = new DBManager(context); } } } return mInstance; } }
可讀數據庫
/** * 獲取可讀數據庫 */ private SQLiteDatabase getReadableDatabase() { if (openHelper == null) { openHelper = new DaoMaster.DevOpenHelper(context, dbName, null); } SQLiteDatabase db = openHelper.getReadableDatabase(); return db; }
可寫數據庫
/** * 獲取可寫數據庫 */ private SQLiteDatabase getWritableDatabase() { if (openHelper == null) { openHelper = new DaoMaster.DevOpenHelper(context, dbName, null); } SQLiteDatabase db = openHelper.getWritableDatabase(); return db; }
/** * 插入一條記錄 * * @param user */ public void insertUser(User user) { DaoMaster daoMaster = new DaoMaster(getWritableDatabase()); DaoSession daoSession = daoMaster.newSession(); UserDao userDao = daoSession.getUserDao(); userDao.insert(user); } /** * 插入用戶集合 * * @param users */ public void insertUserList(List<User> users) { if (users == null || users.isEmpty()) { return; } DaoMaster daoMaster = new DaoMaster(getWritableDatabase()); DaoSession daoSession = daoMaster.newSession(); UserDao userDao = daoSession.getUserDao(); userDao.insertInTx(users); }
/** * 刪除一條記錄 * * @param user */ public void deleteUser(User user) { DaoMaster daoMaster = new DaoMaster(getWritableDatabase()); DaoSession daoSession = daoMaster.newSession(); UserDao userDao = daoSession.getUserDao(); userDao.delete(user); }
/** * 更新一條記錄 * * @param user */ public void updateUser(User user) { DaoMaster daoMaster = new DaoMaster(getWritableDatabase()); DaoSession daoSession = daoMaster.newSession(); UserDao userDao = daoSession.getUserDao(); userDao.update(user); }
/** * 查詢用戶列表 */ public List<User> queryUserList() { DaoMaster daoMaster = new DaoMaster(getReadableDatabase()); DaoSession daoSession = daoMaster.newSession(); UserDao userDao = daoSession.getUserDao(); QueryBuilder<User> qb = userDao.queryBuilder(); List<User> list = qb.list(); return list; } /** * 查詢用戶列表 */ public List<User> queryUserList(int age) { DaoMaster daoMaster = new DaoMaster(getReadableDatabase()); DaoSession daoSession = daoMaster.newSession(); UserDao userDao = daoSession.getUserDao(); QueryBuilder<User> qb = userDao.queryBuilder(); qb.where(UserDao.Properties.Age.gt(age)).orderAsc(UserDao.Properties.Age); List<User> list = qb.list(); return list; }
DBManager dbManager = DBManager.getInstance(this); for (int i = 0; i < 5; i++) { User user = new User(); user.setId(i); user.setAge(i * 3); user.setName("第" + i + "人"); dbManager.insertUser(user); } List<User> userList = dbManager.queryUserList(); for (User user : userList) { Log.e("TAG", "queryUserList--before-->" + user.getId() + "--" + user.getName() +"--"+user.getAge()); if (user.getId() == 0) { dbManager.deleteUser(user); } if (user.getId() == 3) { user.setAge(10); dbManager.updateUser(user); } } userList = dbManager.queryUserList(); for (User user : userList) { Log.e("TAG", "queryUserList--after--->" + user.getId() + "---" + user.getName()+"--"+user.getAge()); }
運行結果
總結:
本文主要介紹了GreenDao 3.0使用註解的狀況,以及實現了簡單的增刪改查,接下來會更一步學習GreenDao更爲複雜的使用的方式。