android_orm框架之greenDAO(一)


目錄:

一、概述

二、下載並解壓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組件中的方法、多表關聯等在后續文章中繼續講解。

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

 

作者: 傑瑞教育
出處: http://www.cnblogs.com/jerehedu/ 
本文版權歸煙台傑瑞教育科技有限公司和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM