標籤:
目錄:
一、概述
二、下載並解壓greenDAO相關資源
三、應用greenDAO架構
1、建立Java工程
2、添加類庫支援
3、建立類
四、程式碼分析
五、使用greenDAO
六、源碼下載
Android開發中對資料的儲存和操作是避免不了的,為此android平台為我們提供了多種儲存資料的方式,如檔案、SharedPreferences、SQLite等。每種資料存放區方式各有不同特點,適用不同情境,其中SQLite應用的較多。Android雖然提供了SQLiteDatabase、SQLiteOpenHelper協助我們進行資料庫操作,但是在實際開發中應用起來是很繁瑣的,那麼有沒有更加方便、簡潔的方式來操作SQLite資料庫呢?答案是肯定的,那就是ORM架構。
現在應用於android平台中的orm架構還是比較多的,如greenDAO、ormlite、ActiveAndroid、SugarORM等,其中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架構效能測試項目
擷取資源後,我們來看看如何在我們的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組件。
相關組件已經產生,下面我們繼續介紹,如何在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組件中的方法、多表關聯等在後續文章中繼續講解。
如有疑問,可下載源碼查看詳細內容,也可直接評論諮詢哦!
android_orm架構之greenDAO