最近在准备开发一个天气预报,有许多基础知识还不是很牢固,开发时候遇到的Litepal就不是很会,看了大神的文章感觉清楚很多在此记录学习一下。文章转自:https://blog.csdn.net/generallizhong/article/details/89176464
下面是我总结的LitePal(其中有对我自己不太懂的地方的特别解释):
LitePal是一款开源的Android数据库框架,采用了对象关系映射(ORM)的模式,将平时开发时最常用的一些数据库功能进行了封装,使得开发者不用编写一行SQL语句就可以完成各种建表、増删改查的操作。并且LitePal很“轻”,jar包大小不到100k,而且近乎零配置,这一点和Hibernate这类的框架有很大区别。目前LitePal的源码已经托管到了GitHub上。
1、准备需要的JAR包 这里下载https://github.com/LitePalFramework/LitePal#latest-downloads
下载好了jar包之后,复制到项目的libs目录中然后引用
当然如果不想用jar包的话,也可以把LitePal的源码下载下来,然后作为一个library库导入到项目当中,再引用这个library库就可以了。
这里我使用的事JAR包进行介绍
2、设置litepal.xml文件,这里比较重要
首先我们需要建一个assets文件夹,这个文件夹和java文件平级
其次在assets文件下新建一个litepal.xml,为了快速可以直接copy一个进去
<?xml version="1.0" encoding="utf-8"?>
<litepal>
<dbname value="demo" ></dbname> 库名称
<version value="1" ></version> 库版本,可升级
<list>
这里是添加表名,后面讲
</list>
</litepal>
用于设定数据库的名字,用于设定数据库的版本号,用于设定所有的映射模型
3、需要配置Application
由于操作数据库时需要用到Context,而我们显然不希望在每个接口中都去传一遍这个参数,那样操作数据库就显得太繁琐了。因此,LitePal使用了一个方法来简化掉Context这个参数,只需要在AndroidManifest.xml中配置一下Application,所有的数据库操作就都不用再传Context了
可能有些程序可能会有自己的Application,并在这里配置过了,那么我们就用其他办法解决,那就只需要修改一下myApplication的继承结构,让它不要直接继承Application类,而是继承我们定义的LitePalApplication类
操作数据库时需要使用到Context参数,我们不想每次都传递这个参数,那么只需要在AndroidManifest.xml中配置下LitePalApplication即可,如下:
<manifest>
<application
android:name="org.litepal.LitePalApplication"
...
>
...
</application>
</manifest>
当然,你可能有自己的Application并且已经配置好,如下:
<manifest>
<application
android:name="com.example.MyOwnApplication"
...
>
...
</application>
</manifest>
没关系,只需要将MyOwnApplication由原来的继承Application类改成继承LitePalApplication类就可以,如下:
public class MyOwnApplication extends LitePalApplication {
...
}
如果你的MyOwnApplication必须继承另外的Application类,如AnotherApplication类,那么你可以直接调用LitePalApplication.initialize(context)而无需继承LiteApplication类,如下:
public class MyOwnApplication extends AnotherApplication {
@Override
public void onCreate() {
super.onCreate();
LitePalApplication.initialize(this);
}
...
}
LitePalApplication.initialize(context)的调用原则是尽可能早,比如合适的调用位置是在Application的onCreate()里调用。调用时传递的参数是Application的context,不要使用任何activity或service的实例作为参数,否则可能发生内存泄漏。
到了这里我们的准备工作已经做完了,接下来我们就可以开始建表了
4、根据对象关系映射模式的理念,每一张表都应该对应一个模型(Model),也就是说,如果我们想要建一张news表,就应该有一个对应的News模型类。新建一个News类,LitePal要求所有的实体类都要继承自DataSupport这个类
public class News extends DataSupport {
//id这个字段可写可不写,因为即使不写这个字段,LitePal也会在表中自动生成一个id列,毕竟每张表都一定要有主键的
private int id;
private String title;
private String content;
private Date publishDate;
private int commentCount;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public Date getPublishDate() {
return publishDate;
}
public void setPublishDate(Date publishDate) {
this.publishDate = publishDate;
}
public int getCommentCount() {
return commentCount;
}
public void setCommentCount(int commentCount) {
this.commentCount = commentCount;
}
}
LitePal的映射规则是非常轻量级的,不像一些其它的数据库框架,需要为每个模型类单独配置一个映射关系的XML,LitePal的所有映射都是自动完成的,LitePal的数据类型支持,可以进行对象关系映射的数据类型一共有8种,int、short、long、float、double、boolean、String和Date。只要是声明成这8种数据类型的字段都会被自动映射到数据库表中,并不需要其他的任何配置。
现在表已经建好,我们需要将表名在assets的litepal.xml中申明(写进去映射)
<?xml version="1.0" encoding="UTF-8" ?>
<litepal>
<!--数据库的名字-->
<dbname value="demo"></dbname>
<!--数据库的版本号-->
<version value="1"></version>
<!--表-->
<list>
<mapping class="com.example.administrator.mylitepal.News"></mapping>
</list>
</litepal>
现在基本已经完成,现在只要你对数据库有任何的操作,news表就会被自动创建出来。比如说LitePal提供了一个便捷的方法来获取到SQLiteDatabase的实例,在onCreate中调用
SQLiteDatabase db = Connector.getDatabase();
这里初始化一下
public class myApplication extends LitePalApplication {
@Override
public void onCreate() {
super.onCreate();
LitePal.initialize(this);
}
}
此时news表就应该已经创建成功了。