LitePal框架浅析
因为在移动软件开发课程期中记事本项目中使用到了LitePal框架,感到方便、实用之余,也很好奇作者究竟是怎么实现的,所以在这里就简单地分析一下源码(主要是CRUD操作部分)。
LitePal简介
LitePal是一款开源的Android数据库框架,采用了对象关系映射(ORM)的模式,将平时开发时最常用的一些数据库功能进行了封装,使得开发者不用编写一行SQL语句就可以完成各种建表、増删改查的操作。
LitePal项目地址:https://github.com/LitePalFramework/LitePal
一、更新表结构
使用LitePal框架需要在项目中新建一个含litepal.xml文件的assets文件夹,以及创建各个实体类,实体类应继承LitePalSupport类。
litepal.xml应包含如下代码:
<?xml version="1.0" encoding="utf-8"?>
<litepal>
<!-- 数据库名 -->
<dbname value="demo" />
<!-- 数据库版本号 -->
<version value="1" />
<!--
定义模型映射, e.g.
<list>
<mapping class="com.test.model.Reader" />
<mapping class="com.test.model.Magazine" />
</list>
-->
<list>
<mapping class="com.test.model.Album" />
</list>
</litepal>
假如我们的实体类是这样的:
public class Album extends LitePalSupport {
private String name;
private float price;
private byte[] cover;
private Date releaseDate;
private List<Song> songs = new ArrayList<Song>();
// generated getters and setters.
...
}
此时如果需要更新表结构,只需修改实体类,并更改litepal.xml中的数据库版本号,在下一次操作数据库时就会更新表结构,非常巧妙的设计,那么他究竟是怎么实现的呢?让我们一起去看源码吧。
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Generator.upgrade(db);
SharedUtil.updateVersion(newVersion);
}
这里首先继承了SQLiteOpenHelper类,并重写了onCreate()和onUpgrade()方法。
Generator中的upgrade(SQLiteDatabase db)方法:
static void upgrade(SQLiteDatabase db) {
drop(db);
create(db, false);
updateAssociations(db);
upgradeTables(db)