android_orm架構之greenDAO(二)

來源:互聯網
上載者:User

標籤:tle   date()   strong   itblog   ati   logs   調用   一點   roi   

一、概述

  在上次greenDao第一篇文章中,我們對greenDao的使用步驟和基本用法給大家做了介紹,文章連結:http://www.cnblogs.com/jerehedu/p/4304766.html 

  現在將繼續深入學習greenDAO。資料查詢展示是應用中最常用的功能之一,greenDAO為我們提供了強大的查詢支援,並且採用完全物件導向的方式,即使一點都不懂SQL也沒有問題。

二、功能實現

  首先按照上文所述過程產生java實體類和dao類,並插入測試資料,主要代碼如下:

  產生器代碼:

    public static void main(String[] args) throws IOException, Exception {        //建立schema對象        Schema scheme = new Schema(1, "com.jredu.entity");        scheme.setDefaultJavaPackageDao("com.jredu.dao");        //添加Employee實體        Entity employee= scheme.addEntity("Employee");        employee.addIdProperty();        employee.addStringProperty("name");        employee.addStringProperty("sex");        employee.addDateProperty("birthday");        employee.addDateProperty("hireDate");        employee.addLongProperty("deptno");        //建立java類        new DaoGenerator().generateAll(scheme, "E:\\android_space\\JREDU_GREENDAO\\src");    }

  插入測試資料:

List<Employee> list = new ArrayList<Employee>();    list.add(new Employee(null, "張三", "男", new Date(), new Date(), 1l));    list.add(new Employee(null, "李四", "男", new Date(), new Date(), 1l));    list.add(new Employee(null, "王五", "男", new Date(), new Date(), 1l));    list.add(new Employee(null, "章章", "女", new Date(), new Date(), 1l));    list.add(new Employee(null, "趙六", "女", new Date(), new Date(), 2l));    list.add(new Employee(null, "趙七", "男", new Date(), new Date(), 1l));    employeeDao.insertInTx(list);

  準備工作完成後,我們看看如何使用greenDAO進行資料查詢,DAO類除了提供load系列方法外,還通過QueryBuilder對象可以進行複雜查詢。

  Load系列方法如下:

public T load(K key):根據主鍵載入實體物件

public T loadByRowId(long rowId):根據rowId載入實體物件

public List<T> loadAll():載入所有有效實體物件。

  Load系列方法比較簡單,在此不做贅述,下面我們主要研究如何通過QueryBuilder對象進行查詢。

  QueryBuilder是greenDAO提供的專門用於構建查詢的類,使用此類,在查詢時我們可以不用使用SQL,比如查詢所有員工資訊,我們可以使用如下代碼:

    //查詢所有員工資訊QueryBuilder<Employee> employeeQuerBuilder= employeeDao.queryBuilder();employeeQuerBuilder.list();

  通過logcat,可查看產生的SQL。

  那麼如何進行條件查詢?QueryBuilder為我們提供了用於構造查詢條件的方法,方法原型如下:

1、public QueryBuilder<T> where(WhereCondition cond, WhereCondition... condMore):使用and串連多個查詢條件。

2、public QueryBuilder<T> whereOr(WhereCondition cond1, WhereCondition cond2, WhereCondition... condMore):使用or串連多個查詢條件。

3、public QueryBuilder<T> orderDesc(Property... properties):排序

4、public WhereCondition or(WhereCondition cond1, WhereCondition cond2, WhereCondition... condMore):使用or構成查詢條件

5、public WhereCondition or(WhereCondition cond1, WhereCondition cond2, WhereCondition... condMore):使用and構成查詢條件

  通過以上方法,我們可以看出使用以上方法需要構建WhereCondition對象,通過查看文檔我們可以通過Dao類中產生的對應實體的Property對象進行構造,

  property部分源碼如下:

/** Creates an "equal (‘=‘)" condition  for this property. */    public WhereCondition eq(Object value) {        return new PropertyCondition(this, "=?", value);    }    /** Creates an "not equal (‘<>‘)" condition  for this property. */    public WhereCondition notEq(Object value) {        return new PropertyCondition(this, "<>?", value);    }    /** Creates an "LIKE" condition  for this property. */    public WhereCondition like(String value) {        return new PropertyCondition(this, " LIKE ?", value);    }    /** Creates an "BETWEEN ... AND ..." condition  for this property. */    public WhereCondition between(Object value1, Object value2) {        Object[] values = { value1, value2 };        return new PropertyCondition(this, " BETWEEN ? AND ?", values);    }    /** Creates an "IN (..., ..., ...)" condition  for this property. */    public WhereCondition in(Object... inValues) {        StringBuilder condition = new StringBuilder(" IN (");        SqlUtils.appendPlaceholders(condition, inValues.length).append(‘)‘);        return new PropertyCondition(this, condition.toString(), inValues);    }

  通過源碼我們可以看出,property類中提供了大量構造WhereCondition的方法,這些方法都是用於構造sql語句內容的。下面我們使用一些例子用來說明如何使用:

三、案例實現
例1:查詢部門1中所有員工
employeeQuerBuilder.where(EmployeeDao.Properties.Deptno.eq(1l));employees = employeeQuerBuilder.list();

例2:查詢部門1中男性員工和部門2中女性員工
WhereCondition whereCondition1=        employeeQuerBuilder.and(Properties.Deptno.eq(1l),Properties.Sex.eq("男"));
WhereCondition whereCondition2= employeeQuerBuilder.and(Properties.Deptno.eq(2l),Properties.Sex.eq("女"));
employees =employeeQuerBuilder.whereOr(whereCondition1, whereCondition2).list();

  實際上QueryBuilder對象每次調用list方法查詢時都是先建立了一個Query對象,Query對象最終用於查詢資料庫。通過文檔和源碼,我們知道Query是一個可重複使用的用於查詢返回實體的查詢對象。比如例子2中,我們將條件改為查詢部門1中的女性員工和部門2中的男性員工,重用例子2中的Query對象,這樣要比每次都使用QueryBuilder的list方法更加高效

Query<Employee> query= employeeQuerBuilder.whereOr(whereCondition1, whereCondition2).build();query.setParameter(0, 1l);query.setParameter(1, "女");query.setParameter(2, 2l);query.setParameter(3, "男");employees = query.list();

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.