程序员人生 网站导航

打造android ORM框架opendroid(一)――ORM框架的使用

栏目:综合技术时间:2015-01-22 09:09:31

1、我的看法

我记得曾有1篇博客是介绍的litepal的使用,在这篇博客中我提到过:本来以为android本身提供的API已封装的够好了,根本不需要甚么ORM框架了,但是在使用了litepal后,我感觉使用ORM框架还是很有必要的,下面是我对ORM和android API的几点看法:

1、做为API级别, android只能广义封装,而不能特定去封装1个API,所以android 对sqlite的封装已很强大了。

2、作为开发者,我们需要为项目提供足够适配的解决方案,可能ORM框架比API更加合适项目。

所以说,ORM框架和原生API其实不冲突,其实不是使用了ORM就得抛弃原生API,乃至,我们可以利用原生API进行2次封装,封装出1个ORM框架,这也是这小系列博客的主题――利用原生API打造我们自己的ORM框架。


2、进入主题

开篇,要先介绍1个opendroid这个自己的ORM框架,然后使用几分钟时间去学会使用这个框架,这里学会使用其实不是目的,而是要在知道怎样用的条件下,去实现1个ORM。固然opendroid(我的ORM框架名称叫opendroid,是否是很骚的1个名字?)的开发仅用了零零散散的4天的时间,所以目前仅支持最基本的CRUD和数据库升级方案,而且很有可能存在大量BUG,不过目的已到达了,就是要做1个自己的ORM。


3、使用opendroid

假设你之前用过ORM框架(不论是甚么平台上的),那末你很快就可以上手opendroid,如果你没有使用过ORM,也没关系,相信只需要1遍就能够弄定!

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文件,并将1下代码复制到open_droid.xml文件中

<?xml version="1.0" encoding="utf⑻"?> <open-droid> <name value="school" /> <version value="1" /> <mapping class="org.loader.opendroid.Student" /> </open-droid>
这个xml中,name节点指定了数据库的名称;version节点指定了数据库的版本,在以后的开发中只需要修改value的值,就能够实现数据库的升级;mapping可能会用多个,指定了与数据表映照的java bean,这里的Student对应的数据库中肯定会有1个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; } }
很普通的1个java bean,定义了两个字段,并提供getter和setter方法,需要注意到是Student继承了OpenDroid类,这个类是我们opendroid库中的1个类。

7、开始使用opendroid的CRUD功能

在上面配置好了以后,我们就能够在业务中很容易的实现CRUD功能了,

7.1、插入数据:

Student stu = new Student(); stu.setStuName("亓斌"); stu.setStuAge(18); stu.save();
在1系列set以后,只需要调用Student中的save方法就能够将数据保存到数据库中,这里你可能会有两个疑问:1)、数据库在哪创建的?2)、save方法哪里来的?在Student里并没有看见这个方法。

回答上面的问题:

1)、数据库在哪创建的?―― 在有数据库操作的时候,opendroid会自动帮我们创建好数据库和mapping中指定实体的表。

2)、save方法哪里来的?―― 固然是从OpenDroid中继承过来的,以后的博客在实现opendroid的进程中,会说到这个方法。

7.2、更新数据

opendroid提供了1系列的方法来简化update操作

Student stu = new Student(); stu.setStuName("loader"); stu.update("_id>?", "4");
上面的代码是将id大于4的stuName更新为loader,这里你可能又有疑问了:Student中我们并没有定义id啊,这里怎样可使用id呢? 是这样的, 在定义实体类的时候并需要创建id字段,opendroid会自动帮我们创建1个_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);
1行代码就能够弄定删除,上面代码是删除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中1个静态变量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中还提供了1系列方法来设置查询语句中的where、order、limit等,

columns()方法是指定要查询的字段

where()方法是指定查询的条件

order()方法是指定查询数据的排列方式

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

最后调用find方法将数据查询出来。


不知不觉,我们已将opendroid中最主要的crud操作基本全部掌握了,相信很容易就能够理解这里代码,下面来看看如何使用opendroid升级数据库

1、修改open-droid.xml文件中version字段的value值。

2、添加或删除mapping,或根据业务升级需求调剂某个实例类的字段

只需要上面两步,在下次使用数据库的时候,opendroid就会自动帮我们升级数据库,并且会将现在的数据更新到新的表中,完全不用担心数据库升级进程中数据的丢失,固然我们抛弃的字段opendroid会自动疏忽。


1篇博客的时间,我们已掌握可opendroid的使用,绝大多数的ORM框架的用法也大差不差,所以你也1并掌握了ORM的基本语法。

在接下来的几篇博客中,我会1步步的去讲授opendroid是如何实现的,终究打造出1个属于你自己的ORM框架!

马上继续《打造android ORM框架opendroid(2)――自动创建数据库



------分隔线----------------------------
------分隔线----------------------------

最新技术推荐