android_orm架構之greenDAO

來源:互聯網
上載者:User

標籤:

目錄:

一、概述

二、下載並解壓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相關資源

  通過官網,可以擷取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組件中的方法、多表關聯等在後續文章中繼續講解。

  如有疑問,可下載源碼查看詳細內容,也可直接評論諮詢哦!

 

android_orm架構之greenDAO

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.