目錄:
一、概述
1、創建Java工程
2、添加類庫支持
3、創建類
四、代碼分析
六、源碼下載
一、概述 |
Android開發中對數據的存儲和操作是避免不了的,為此android平台為我們提供了多種存儲數據的方式,如文件、SharedPreferences、SQLite等。每種數據存儲方式各有不同特點,適用不同場景,其中SQLite應用的較多。Android雖然提供了SQLiteDatabase、SQLiteOpenHelper幫助我們進行數據庫操作,但是在實際開發中應用起來是很繁瑣的,那么有沒有更加方便、簡潔的方式來操作SQLite數據庫呢?答案是肯定的,那就是ORM框架。
現在應用於android平台中的orm框架還是比較多的,如greenDAO、ormlite、ActiveAndroid、SugarORM等,其中greenDAO運行效率最高、內存消耗最少。下面我們就來看看greenDAO的具體用法。
二、下載並解壓greenDAO相關資源 |
通過官網,可以獲取greenDAO的相關資源,官網地址:http://greendao-orm.com/ 。
通過上述地址,將greenDAO相關資源下載解壓后,可得到六個相關的項目工程:
1、 DaoCore:greenDAO的核心庫。
2、 DaoExample:greenDAO使用范例項目。
3、 DaoExampleGenerator:greenDAO使用范例的實體類及DAO組件的生成器項目。
4、 DaoGenerator:greenDAO的DAO組件生成器項目。
5、 DaoTest:greenDAO的測試項目。
6、 PerformanceTestOrmLite:ormlite框架性能測試項目
三、應用greenDAO框架 |
獲取資源后,我們來看看如何在我們的android項目中應用greenDAO框架。結合官網文檔和范例可知android項目中用到的實體及greenDAO的DAO組件需要又DAO組件生成器工程來生成。DAO組件生成器工程創建及相關代碼具體如下:
1、創建Java工程
使用MyEclipse創建一個普通的java工程,工程名為:JREDU_DAOGENERATOR。注意是java工程而不是一個android工程。
2、為工程JREDU_DAOGENERATOR添加類庫支持
為工程JREDU_DAOGENERATOR添加類庫支持:greenDAO-generator.jar和freemarker.jar。
a) Freemaker.jar可通過此地址進行下載:http://jaist.dl.sourceforge.net/project/freemarker/freemarker/2.3.21/freemarker-2.3.21.tar.gz
b) greenDAO-generator.jar可通過DaoGenerator導出。只需要導出src和src-template兩個目錄即可
3、在工程JREDU_DAOGENERATOR創建類JREDUDaoGenerator
在工程JREDU_DAOGENERATOR創建類JREDUDaoGenerator,具體編碼如下:
public static void main(String[] args) throws IOException, Exception { Schema schema = new Schema(1, "com.jredu.entity"); //實體類 Entity employee = schema.addEntity("Employee"); employee.addIdProperty(); //主鍵 employee.addStringProperty("name"); employee.addDateProperty("hireDate"); //生成 new DaoGenerator() .generateAll(schema,"E:\\android_space\\JREDU_GREENDAO\\src"); }
運行代碼,在控制台可見如下圖結果:
打開上圖中的目錄,我們可以看到此工程為我們生成了4個文件,分別為EmployeeDao、Employee、DaoMaster、DaoSession,文件的內容和作用,后文在做介紹。
通過以上步驟,我們完了實體類和DAO組件的生成,下面我們來分析下代碼中涉及的類及它們的作用。
四、代碼分析 |
Schema,模式,通過源碼我們可以看到此類的一些屬性,如:
Private final int version:代表構建數據庫的版本號。
Private final String defaultJavaPackage:代表生成實體類的默認包。
Private final List<Entity> entities:存放Entity的集合。
因此我們也可以把Schema看做是存放實體的容器。
通過構造函數:Schema schema = new Schema(1, "com.jredu.entity");我們創建了一個模式,參數1代表數據庫的版本號,”com.jredu.entity”代表生成的java類的包,同時也是生成類存放路徑的一部分。
通過方法:Entity employee = schema.addEntity("Employee");創建了一個類名為Employee的Entity對象,並將其添加到schema對象的entities集合屬性中。
Property:實體屬性的模型,用於關聯實體屬性和表的列。
ToOne、ToMany:用於關聯關系映射。
Entity實體的模型,可用於將實體類映射到對應的表。主要屬性有className、tableName、屬性、索引、關系等內容,具體請查看源碼。
Schema、Entity、Property、Index、ToOne、ToMany關系圖:
DaoGenerator:實體類和DAO組件的生成器,generateAll根據schema和目錄參數,首先生成文件存放目錄,並從schema中取出所有entity,根據freemaker模板生成對應的實體了和DAO組件。
五、使用greenDAO |
相關組件已經生成,下面我們繼續介紹,如何在android項目中使用greenDAO,過程如下:
1、 創建android工程,工程名:JREDU_GREENDAO。
2、 創建包名,與上面構建的Schema中的包名一致。本文案例直接將實體類和DAO組件的生成到本工程下。
3、為JREDU_GREENDAO添加greenDAO的jar。可以從工程DaoExample中拷貝。
4、主要代碼如下:
對象聲明部分:
private DaoMaster daoMaster; private DaoSession daoSession; private EmployeeDao employeeDao; private SQLiteDatabase db;
對象的創建部分:
DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "jredu.db", null); db = helper.getWritableDatabase(); daoMaster = new DaoMaster(db); daoSession = daoMaster.newSession(); employeeDao = daoSession.getEmployeeDao();
添加功能:
String name = this.content.getText().toString(); if(TextUtils.isEmpty(name)){ Toast.makeText(this, "請輸入員工姓名!", Toast.LENGTH_SHORT).show(); return; } Employee emp = new Employee(null, name, new Date()); long empId = employeeDao.insert(emp); this.show.setText("新增員工的編號:"+empId+","+emp.getId()); //一次插入多個對象 List<Employee> list = new ArrayList<Employee>(); list.add(new Employee(null, "李四", new Date())); list.add(new Employee(null, "王五", new Date())); employeeDao.insertInTx(list, true); StringBuilder sb = new StringBuilder("批量新增成功后的員工編號:"); for(Employee e:list){ sb.append(e.getId()); } this.show.setText(this.show.getText()+","+sb.toString());
查詢部分:
List<Employee> emps= employeeDao.loadAll(); StringBuilder empStr = new StringBuilder(); for(Employee e: emps){ empStr.append("編號:").append(e.getId()).append(",姓名:").append(e.getName()).append(",雇佣日期:").append(e.getHireDate()); } this.show.setText(empStr.toString());
最終效果圖如下:
從代碼中,我們看到功能的實現主要使用了Employee、EmployeeDao、DaoMaster、DaoSession。
Employee:實體對象,映射到表EMPLOYEE。
EmployeeDAO:通過代碼可知此類提供了生成建表、和刪表的方法,並類繼承了AbstractDao(greenDAO核心類之一,封裝了操作表中數據的各種方法)。
DaoMaster:繼承自AbstractDaoMaster,用於創建數據庫,並管理數據庫連接。
DaoSession:繼承自AbstractDaoSession,所有DAO對象的入口,通過此類可獲得實體了的DAO組件。
六、源碼下載 |
以上是geenDAO的基本使用過程,DAO組件中的方法、多表關聯等在后續文章中繼續講解。
如有疑問,可下載源碼查看詳細內容,也可直接評論咨詢哦!
出處: http://www.cnblogs.com/jerehedu/
本文版權歸煙台傑瑞教育科技有限公司和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。