概述
LitePal是一款开源的Android 数据库框架,它采用了对象关系映射(ORM)的模式,并将我们平时开发最长用到的一些数据库功能进行了封装,能够不用编写一行SQL语句就可以完成各种建表,增删该查的操作。LitePal是一个轻量级的开源库,jar包只有100k不到,而且近乎零配置,使用非常的方便。
github地址:https://github.com/LitePalFramework/LitePal
配置Litepal
1。添加依赖
dependencies {
compile 'org.litepal.android:core:1.3.2'
}
2。配置litepal.xml
在项目的main/assets目录下面新建一个litepal.xml文件,如下:
<?xml version="1.0" encoding="utf-8"?>
<litepal>
<!--设置项目中数据库的名字 -->
<dbname value="demo" ></dbname>
<!--用于设定数据库的版本号,每次你想要更新数据库,修改该值 -->
<version value="1" ></version>
<!-- 用于设定所有的映射模型,配置对应的类 -->
<list>
</list>
</litepal>
3。配置LitePalApplication
我们不愿意每次操作数据库都传递参数Context,为了使APIs简单点,只需要在AndroidManifest.xml中配置一下LitePalApplication,如下:
<manifest>
<application
android:name="org.litepal.LitePalApplication"
...
>
...
</application>
</manifest>
如果我们之前配置了自己的Application,我们只需要修改一下继承结构,让它不要直接继承Application类,而是继承LitePalApplication类,如下:
public class MyApplication extends LitePalApplication {
...
}
开始使用Litepal
1.创建表
根据对象关系映射模式的理念,每一张表都应该对应一个模型(Model),也就是,想要建一张news表,那么就应该有对应的News模型类。新建一个News类,如下:
public class News extends DataSupport{
private String title;
private String content;
private Date publishDate;
private int commentCounts;
//自动生成get,set方法
}
上面每个字段,对应表中的每一个列。
上面的Model类完成之后,我们还需要将它配置到映射到列表当中,编辑之前assets目录下的litepal.xml文件,在标签中加入News模型类的声明:
<?xml version="1.0" encoding="utf-8"?>
<litepal>
<dbname value="demo"></dbname>
<version value="1"></version>
<list>
<mapping class="com.example.yumf.mydemo.News"></mapping>
</list>
</litepal>
注意这里一定要填入News类的完整类名路径。
接下来,你只要对数据库有任何的操作,news表就会被自动创建出来,比如说LitePal提供了一个便捷的方法来获取到SQLiteDatabase的实例,如下:
SQLiteDatabase db = Connector.getDatabase();
以上便完成了表的创建;
2.升级表
当需要新增comment表,只需要如上一样建立一个Comment类,然后修改litepal.xml中的配置,在映射中新增Comment类,并将版本号加1,如下:
<?xml version="1.0" encoding="utf-8"?>
<litepal>
<dbname value="demo"></dbname>
<version value="2"></version>
<list>
<mapping class="com.example.yumf.mydemo.News"></mapping>
<mapping class="com.example.yumf.mydemo.Comment"></mapping>
</list>
</litepal>
这时,如果想要在原有表上,添加或修改某一列时,我们只需要在对应的Model类中,修改对应属性,接着在litepal.xml中对版本号加1就行了,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<litepal>
<dbname value="demo"></dbname>
<version value="3"></version>
. . .
</litepal>
以上就完成了对表的升级处理。
3.建立表关联
使用LitePal来自动建立表关联又是一个非常不错的选择,我们不需要关心什么外键、中间表等实现的细节,只需要在对象中声明好它们相互之间的引用关系,LitePal就会自动在数据库表之间建立好相应的关联关系了。
public class News extends DataSupport {
. . .
private List<Comment> comments = new ArrayList<>();
. . .//自动生成get、set方法
}
public class Comment extends DataSupport {
. . .
private News news;
. . .//自动生成get、set方法
}
保存数据:
News news = new News();
news.setTitle("标题1");
news.setContent("内容");
news.save();
Comment comment = new Comment();
comment.setCounts(10);
comment.setName("person1");
comment.setNews(news);
comment.save();
Comment com = new Comment();
com.setCounts(20);
com.setName("person2");
com.setNews(news);
com.save();
我们可以看看数据库表结构
4.对数据进行CRUD操作
存储:save(),saveAll()
News news = new News();
news.setTitle("这是一条新闻标题");
news.setContent("这是一条新闻内容");
news.setPublishDate(new Date());
news.save();
修改:update(),updateAll()
//修改news表中,id为2的记录为"标题2"
ContentValues values = new ContentValues();
values.put("title", "标题2");
DataSupport.update(News.class, values, 2);
或:
News updateNews = new News();
updateNews.setTitle("标题2");
updateNews.update(2);
删除:delete(),deleteAll()
//删除news表中id为2的记录
DataSupport.delete(News.class, 2);
//把news表中所有的数据全部删除掉
DataSupport.deleteAll(News.class);
News news;
...
if (news.isSaved()) { //判断是否持久化
news.delete();
}
查询:find(),findFirst(),findLast(),findAll()
//查询news表中id为1的这条记录
News news = DataSupport.find(News.class, 1);
//获取news表中的第一条数据
News firstNews = DataSupport.findFirst(News.class);
//获取News表中的最后一条数据
News lastNews = DataSupport.findLast(News.class);
//获取多个id对应的数据
List<News> newsList = DataSupport.findAll(News.class, 1, 3, 5, 7);
//查询所有数据
List<News> allNews = DataSupport.findAll(News.class);
List<News> newsList = DataSupport.select("title", "content")
.where("commentcount > ?", "0")
.order("publishdate desc").limit(10).find(News.class);