打造android ORM架構opendroid(一)——ORM架構的使用,ormopendroid

來源:互聯網
上載者:User

打造android ORM架構opendroid(一)——ORM架構的使用,ormopendroid

一、我的看法

我記得曾經有一篇部落格是介紹的litepal的使用,在這篇部落格中我提到過:本來以為android本身提供的API已經封裝的夠好了,根本不需要什麼ORM架構了,但是在使用了litepal後,我感覺使用ORM架構還是很有必要的,下面是我對ORM和android API的幾點看法:

1、做為API層級, android只能廣義封裝,而不能特定去封裝一個API,所以android 對sqlite的封裝已經很強大了。

2、作為開發人員,我們需要為項目提供足夠適配的解決方案,可能ORM架構比API更加適合項目。

所以說,ORM架構和原生API並不衝突,並不是使用了ORM就得拋棄原生API,甚至,我們可以利用原生API進行二次封裝,封裝出一個ORM架構,這也是這小系列部落格的主題——利用原生API打造我們自己的ORM架構。


二、進入主題

開篇,要先介紹一個opendroid這個自己的ORM架構,然後使用幾分鐘時間去學會使用這個架構,這裡學會使用並不是目的,而是要在知道怎麼用的前提下,去實現一個ORM。當然opendroid(我的ORM架構名稱叫opendroid,是不是很騷的一個名字?)的開發僅用了零零散散的4天的時間,所以目前僅支援最基本的CRUD和資料庫升級方案,而且很有可能存在大量BUG,不過目的已經達到了,就是要做一個自己的ORM。


三、使用opendroid

假如你之前用過ORM架構(不管是什麼平台上的),那麼你很快就能上手opendroid,如果你沒有使用過ORM,也沒關係,相信只需要一遍就可以搞定!

1、首先需要下載opendroid,現在這個項目我開源到了git@osc上,可以到下面地址下載jar包和原始碼

http://git.oschina.net/qibin/OpenDroid

2、下載後,將library中的opendroid.jar複製到項目的libs目錄下。

3、修改AndroidMenifest.xml檔案的Application,添加anrdroid:name="android:name="org.loader.opendroid.app.DroidApplication"

4、建立將要與資料庫映射的java bean。

5、在asserts目錄下建立open_droid.xml檔案,並將一下代碼複製到open_droid.xml檔案中

<?xml version="1.0" encoding="utf-8"?><open-droid>    <name value="school" /><version value="1" /><mapping class="org.loader.opendroid.Student" /></open-droid>
這個xml中,name節點指定了資料庫的名稱;version節點指定了資料庫的版本,在以後的開發中只需要修改value的值,就可以實現資料庫的升級;mapping可能會用多個,指定了與資料表映射的java bean,這裡的Student對應的資料庫中肯定會有一個Student表。

6、建立與資料庫映射的java bean檔案

package org.loader.opendroid;import org.loader.opendroid.db.OpenDroid;public class Student extends OpenDroid {private String stuName;private int stuAge;public String getStuName() {return stuName;}public void setStuName(String stuName) {this.stuName = stuName;}public int getStuAge() {return stuAge;}public void setStuAge(int stuAge) {this.stuAge = stuAge;}}
很普通的一個java bean,定義了兩個欄位,並提供getter和setter方法,需要注意到是Student繼承了OpenDroid類,這個類是我們opendroid庫中的一個類。

7、開始使用opendroid的CRUD功能

在上面配置好了以後,我們就可以在業務中很容易的實現CRUD功能了,

7.1、插入資料:

Student stu = new Student();stu.setStuName("亓斌");stu.setStuAge(18);stu.save();
在一系列set以後,只需要調用Student中的save方法就可以將資料儲存到資料庫中,這裡你可能會有兩個疑問:1)、資料庫在哪建立的?2)、save方法哪裡來的?在Student裡並沒有看見這個方法。

回答上面的問題:

1)、資料庫在哪建立的?—— 在有資料庫操作的時候,opendroid會自動幫我們建立好資料庫和mapping中指定實體的表。

2)、save方法哪裡來的?—— 當然是從OpenDroid中繼承過來的,以後的部落格在實現opendroid的過程中,會說到這個方法。

7.2、更新資料

opendroid提供了一系列的方法來簡化update操作。

Student stu = new Student();stu.setStuName("loader");stu.update("_id>?", "4");
上面的代碼是將id大於4的stuName更新為loader,這裡你可能又有疑問了:Student中我們並沒有定義id啊,這裡怎麼可以使用id呢? 是這樣的, 在定義實體類的時候並需要建立id欄位,opendroid會自動幫我們建立一個_id欄位。

還有什麼更新操作呢?

Student stu = new Student();stu.setStuName("loader");stu.update(4);
上面的代碼是將id為4的stuName更新為loader

當然,你也可以使用ContentValues進行更新:

ContentValues cv = new ContentValues();cv.put("stuName", "opendroid");OpenDroid.update(Student.class, cv, "_id=?", "8");
很容易就理解了,這是將id大於8的stuName更新為opendroid.

好了,更新操作就說這麼多,相信,已經夠應付日常的開發工作了。

7.3、刪除資料

opendroid的刪除功能也很簡單,並且也像上面代碼這麼直觀。

int length = OpenDroid.delete(Student.class, 1, 2, 3);System.out.println(length);
一行代碼就可以搞定刪除,上面代碼是刪除id為1或2或3的資料。

使用條件刪除

int length = OpenDroid.delete(Student.class, "_id>?", "5");System.out.println(length);
上面的代碼的作用是刪除id大於5的資料

在CRUD中相對麻煩點的就是查詢操作了,當然opendroid對查詢操作也進行了封裝。

Student result = OpenDroid.query.find(Student.class, 1);System.out.println(result.getStuName());

上面的代碼是查詢id為1的資料,並將查詢結果映射到Student類中。

List<Student> result = OpenDroid.query.find(Student.class);for(Student res : result) {System.out.println(res.getStuName());}
哈哈,把條件省略就是查詢所有資料了,當然這裡返回的List集合。


List<Student> result = OpenDroid.query.find(Student.class, 1, 5, 10);for(Student res : result) {System.out.println(res.getId() + " : " + res.getStuName());}

查詢id為1或5或10的資料,注意是調用的OpenDroid中一個靜態變數query的方法。

List<Student> result = OpenDroid.query.columns("stuName", "stuAge").where("_id>?", "5").order("_id DESC").limit(3)
<span></span>     .find(Student.class);for(Student res : result) {System.out.println(res.getStuName() + " : " + res.getStuAge());}

當然query中還提供了一系列方法來設定查詢語句中的where、order、limit等,

columns()方法是指定要查詢的欄位

where()方法是指定查詢的條件

order()方法是指定查詢資料的相片順序

limit()方法是指定select語句的limit

最後調用find方法將資料查詢出來。


不知不覺,我們已經將opendroid中最主要的crud操作基本全部掌握了,相信很容易就可以理解這裡代碼,下面來看看如何使用opendroid升級資料庫。

1、修改open-droid.xml檔案中version欄位的value值。

2、添加或刪除mapping,或者根據業務升級需求調整某個執行個體類的欄位

只需要上面兩步,在下次使用資料庫的時候,opendroid就會自動幫我們升級資料庫,並且會將現在的資料更新到新的表中,完全不用擔心資料庫升級過程中資料的丟失,當然我們拋棄的欄位opendroid會自動忽略。


一篇部落格的時間,我們已經掌握可opendroid的使用,絕大多數的ORM架構的用法也大差不差,所以你也一併掌握了ORM的基本文法。

在接下來的幾篇部落格中,我會一步步的去講解opendroid是如何?的,最終打造出一個屬於你自己的ORM架構!



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.