LitePal开源项目地址:https://github.com/LitePalFramework/LitePal
1. 什么是LitePal:
百度百科这么说的,LitePal是一款开源的Android数据库框架,采用了对象关系映射(ORM)的模式,将平时开发时最常用的一些数据库功能进行了封装,使得开发者不用编写一行SQL语句就可以完成各种建表、増删改查的操作。并且LitePal很“轻”,jar包大小不到100k,而且近乎零配置,这一点和Hibernate这类的框架有很大区别。目前LitePal的源码已经托管到了GitHub上。
2. 配置LitePal
配置LitePal虽然稍微麻烦了点,但是这是一本万利的买卖,配置成功,就可以体检极其便利的数据库操作。
- 首先引入jar包
LitePal的Github地址在这里下载jar包引入项目中
编辑gradle.build文件,添加以下代码
dependencies {
compile 'org.litepal.android:core:1.3.1'
}
- 在项目的assets文件下创建一个litepal.xml,放在main文件夹下,内容为
<?xml version="1.0" encoding="utf-8"?>
<litepal>
<!--
定义数据库的名称,需要以.db作为文件后缀,如果没有.db,将会默认添加
-->
<dbname value="demo" ></dbname>
<!--
定义数据库的版本号
-->
<version value="1" ></version>
<!--
定义所有的映射模型,LitePal会对每一个表创建映射类
例如
<list>
<mapping class="com.test.model.Reader"></mapping>
<mapping class="com.test.model.Magazine"></mapping>
</list>
-->
<list>
</list>
</litepal>
- 配置LitePalApplication
你肯定不想总是传入Context对象,所以我们要配置Application,这也是一个一劳永逸的办法。在清单文件中进行配置
<manifest>
<application
android:name="org.litepal.LitePalApplication"
...
>
...
</application>
</manifest>
但是一般的项目我们一般已经配置过Application来获取全局对象了,例如:
<manifest>
<application
android:name="com.example.MyOwnApplication"
...
>
...
</application>
</manifest>
不要心慌,不要着急,而且还有有些程序可能会遇到一些更加极端的情况,比如说MyApplication需要继承另外一个AnotherApplication,并且这个AnotherApplication还是在jar包当中的,不能修改它的代码。这种情况应该算是比较少见了,但是如果你遇到了的话也不用急,我们可以调用LitePalApplication.initialize(context) 方法即可
public class MyOwnApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
LitePalApplication.initialize(this);
}
...
}
3. 开始使用LitePal
- 创建表
前面我们提到一个很重要的概念,对象关系映射(ORM)的模式,这个到底是个什么玩意儿?
引用郭神的话:我们为什么要使用对象关系映射模式呢?这主要是因为大多数的程序员都很擅长面向对象编程,但其中只有少部分的人才比较精通关系型数据库。而且数据库的SQL语言晦涩难懂,就算你很精通它,恐怕也不喜欢经常在代码中去写它吧?而对象关系映射模式则很好地解决了这个问题,它允许我们使用面向对象的方式来操作数据库,从而可以从晦涩难懂的SQL语言中解脱出来。
那么接下来我们就看一看LitePal中是如何建表的吧。根据对象关系映射模式的理念,每一张表都应该对应一个模型(Model)。
我们来建立两个表,一个Album一个Song,get和set方法自己添加即可,主要用于后面的数据的操作
package com.example.kevin.learnsqlite.model;
import org.litepal.annotation.Column;
import org.litepal.crud.DataSupport;
import java.util.ArrayList;
import java.util.List;
/**
* 作者:Created by Kevin on 2016/3/9.
* 邮箱:haowei0708@163.com
* 描述:
*/
public class Album extends DataSupport {
@Column(unique = true, defaultValue = "unknown")
private String name;
private float price;
private byte[] cover;
private List<Song> songs = new ArrayList<Song>();
}
package com.example.kevin.learnsqlite.model;
import org.litepal.annotation.Column;
import org.litepal.crud.DataSupport;
/**
* 作者:Created by Kevin on 2016/3/9.
* 邮箱:haowei0708@163.com
* 描述:
*/
public class Song extends DataSupport {
@Column(nullable = false)
private String name;
private int duration;
@Column(ignore = true)
private String uselessField;
private Album album;
}
最后一步,就是将它配置到映射列表当中。编辑assets目录下的litepal.xml文件,在标签中加入Album和Song模型类的声明:(记得修改为自己的包名)
<list>
<mapping class="com.example.kevin.learnsqlite.model.Album"></mapping>
<mapping class="com.example.kevin.learnsqlite.model.Song"></mapping>
</list>
所有工作做完,只需要在获取SQLiteDatabase的实例即可,SQLiteDatabase db = Connector.getDatabase();
导出后看到数据库已经创建成功,这就是对象关系映射(ORM),是不是很直观。
- 升级表
说完创建表,再来看看使用LitePal升级表是如何方便我们进行升级的,看了Android数据库SQLite操作详解及LitePal用法详解(一)的童鞋应该知道需要在SQLiteOpenHelper中的onUpdate方法中进行升级,但是还得需要顾虑之前所创建的表,现在使用LitePal就没有这方面的担忧了,来看看是如何使用的:
我们给Album增加一行数据,private Date releaseDate;
public class Album extends DataSupport {
@Column(unique = true, defaultValue = "unknown")
private String name;
private float price;
private Date releaseDate;
private byte[] cover;
private List<Song> songs = new ArrayList<Song>();
}
然后将litepal.xml文件中的版本号改为2即可。
Android数据库SQLite操作详解及LitePal用法详解(四)
接下来继续学习使用LitePal进行数据库的操作