一、關於greenDAO
greenDAO是一個開源的Android ORM,它讓SQLite數據庫的開發再次變得有趣。它使開發人員免於處理低級數據庫要求,同時節省了開發時間。SQLite是一個很棒的嵌入式關系數據庫。盡管如此,編寫SQL和解析查詢結果仍然是非常繁瑣且耗時的任務。通過將Java對象映射到數據庫表(稱為ORM,“對象/關系映射”),greenDAO使您擺脫了這些麻煩。這樣,您可以使用簡單的面向對象的API來存儲,更新,刪除和查詢Java對象。
二、greenDAO優點
最佳性能 (可能是 Android 中最快的 ORM) ,基准測試也是開源的;
易於使用的功能強大的 api,涵蓋關系和連接;
最小的內存消耗;
小型庫大小(< 100KB) ,以保持較低的構建時間,並避免65k 方法限制;
數據庫加密:greenDAO 支持 SQLCipher 來保證用戶數據的安全;
強大而活躍的社區交流支持,相關資料比較完善;
許多頂級的Android應用程序都依賴greenDAO,其中一些應用程序的安裝量超過1000萬,更證明了其可靠性。
三、 引入greenDAO
首先在項目目錄下的build.gradle中配置
repositories { // GreenDao倉庫 mavenCentral() }
dependencies { // GreenDao插件 classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' }
然后在app目錄下的build.gradle中配置
//GreenDao插件 apply plugin: 'org.greenrobot.greendao'
dependencies { implementation 'org.greenrobot:greendao:3.2.2' }
android { greendao { schemaVersion 1 //數據庫版本號 每次升級數據庫都需要改變版本,只能增加 daoPackage 'com...green' //設置DaoMaster、 DaoSession、Dao包名 targetGenDir 'src/main/java' //設置DaoMaster、DaoSession、Dao目錄 } }
四、創建數據庫及增刪改查操作
先創建一個實體類
@Entity public class UserIm { @Id private Long id; private String userId; private String name; private String url; }
其中Long id對應數據表中的主鍵,是一條數據的唯一標識。
創建完之后,點擊Make Project圖標
會自動生成get、set方法,同時在上述填寫的目錄中生成Dao文件
在Application中初始化
private DaoMaster daoMaster; private static DaoSession daoSession; private DaoMaster.DevOpenHelper devOpenHelper=null; devOpenHelper=new DaoMaster.DevOpenHelper(getApplicationContext(),"數據庫名稱.db",null); //實例化DaoMaster對象 daoMaster=new DaoMaster(devOpenHelper.getWritableDb()); //實例化DaoSession對象 daoSession=daoMaster.newSession(); //通過此方法,進行增刪改查 public static DaoSession getDaoSession(){ return daoSession; }
插入數據
UserImDao userDao = ServerObserver.getDaoSession().getUserImDao(); userDao.insert(new UserIm(null,userId, name, url));
刪除數據
//清空所有數據 DaoSession daoSession = ServerObserver.getDaoSession(); Database database = daoSession.getUserImDao().getDatabase(); DaoMaster.dropAllTables(database, true); DaoMaster.createAllTables(database, true); //刪除某一條數據 userDao.deleteByKey(id);
修改數據
List<UserIm> userIms; //所有的user userIms = userDao.queryBuilder().where(UserImDao.Properties.UserId.eq(userId)).list(); if (userIms.size()>0){ //改 userIms.get(0).setName(title); userIms.get(0).setUrl(url); userDao.update(userIms.get(0)); }
查看數據
List<UserIm> userIms; //所有的user userIms = userDao.queryBuilder().where(UserImDao.Properties.UserId.eq(targetId)).list();