打造android ORM框架opendroid(一)——ORM框架的使用
来源:互联网 发布:安卓卡iphone7在线软件 编辑:程序博客网 时间:2024/05/18 13:04
转载自:http://blog.csdn.net/qibin0506/article/details/42736807
一、我的看法
我记得曾经有一篇博客是介绍的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>
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;
- }
- }
7、开始使用opendroid的CRUD功能
在上面配置好了以后,我们就可以在业务中很容易的实现CRUD功能了,
7.1、插入数据:
- Student stu = new Student();
- stu.setStuName("亓斌");
- stu.setStuAge(18);
- stu.save();
回答上面的问题:
1)、数据库在哪创建的?—— 在有数据库操作的时候,opendroid会自动帮我们创建好数据库和mapping中指定实体的表。
2)、save方法哪里来的?—— 当然是从OpenDroid中继承过来的,以后的博客在实现opendroid的过程中,会说到这个方法。
7.2、更新数据
opendroid提供了一系列的方法来简化update操作。
- Student stu = new Student();
- stu.setStuName("loader");
- stu.update("_id>?", "4");
还有什么更新操作呢?
- Student stu = new Student();
- stu.setStuName("loader");
- stu.update(4);
当然,你也可以使用ContentValues进行更新:
- ContentValues cv = new ContentValues();
- cv.put("stuName", "opendroid");
- OpenDroid.update(Student.class, cv, "_id=?", "8");
好了,更新操作就说这么多,相信,已经够应付日常的开发工作了。
7.3、删除数据
opendroid的删除功能也很简单,并且也像上面代码这么直观。
- int length = OpenDroid.delete(Student.class, 1, 2, 3);
- System.out.println(length);
使用条件删除
- int length = OpenDroid.delete(Student.class, "_id>?", "5");
- System.out.println(length);
在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<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框架!
马上继续《打造android ORM框架opendroid(二)——自动创建数据库》
- 打造android ORM框架opendroid(一)——ORM框架的使用
- 打造android ORM框架opendroid(一)——ORM框架的使用
- 打造android ORM框架opendroid(一)——ORM框架的使用
- 打造android ORM框架opendroid(六)——级联查询
- 打造android ORM框架opendroid(四)——优雅的删除数据
- 打造android ORM框架opendroid(五)——数据更新的实现
- 打造android ORM框架opendroid(五)——数据更新的实现
- 打造android ORM框架opendroid(四)——优雅的删除数据
- 打造android ORM框架opendroid(二)——自动创建数据库
- 打造android ORM框架opendroid(三)——持久化数据
- 打造android ORM框架opendroid(二)——自动创建数据库
- 打造android ORM框架opendroid(三)——持久化数据
- 打造android ORM框架opendroid(七)——数据库升级方案
- 打造Android ORM框架
- GreenDAO—Android ORM框架(一)
- GreenDAO—Android ORM框架(一)
- Android 数据库ORM框架(一)
- Android ORM 框架:GreenDao的使用,只需看一遍就会
- 去除ckeditor上传图片打开窗口里面的上传高级和链接tab
- android 进度条 自定义菊花
- JAVA学习知识点1.24之SpringMVC学习Day05
- Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面
- java.util.concurrent包介绍(3)——Happens-before法则
- 打造android ORM框架opendroid(一)——ORM框架的使用
- [暖手][学习阶段-各路杂题][HDU-1017]A Mathematical Curiosity
- Codeforces Round #288 (Div. 2) C. Anya and Ghosts
- 【SzNOI语法百题】【d014】判断直角三角形
- [C++]LeetCode: 129 Clone Graph (图的深拷贝 BFS && DFS)
- 【C/C++学院】(8)全局函数和类成员函数转化/友元/操作符重载
- Leetcode -- Jump Game II
- 微信公众号用户与网站用户的绑定方案
- Linux命令使用