LitePal是大神郭霖开发的ORM框架:
开源地址:https://github.com/LitePalFramework/LitePal
本篇介绍1.4.1版本,1.5.0版本更多内容请查看我写的 LitePal 1.5.0版本新增功能
因为之前在开发中也用过GreenDAO,对比两种框架我的感觉是LitePal在操作上更加方便,在效率上GreenDao更加高效,但对一般的app开发来讲LitePal已经足够满足我们的需要。好了,闲言碎语不要讲,我们直接进入今天的主题:
1、LitePal的环境配置:
1.1 在build.gradle(Moudle:app)中添加依赖:
compile 'org.litepal.android:core:1.4.1'
1.2 在main文件夹下创建资产目录(即assets目录),并在assets目录下创建litepal.xml文件,如下图:
在litepal.xml文件中配置如下代码:
<?xml version="1.0" encoding="utf-8"?>
<litepal>
<!--BookStore为数据库名称-->
<dbname value="BookStore" ></dbname>
<!--1为版本号-->
<version value="1" ></version>
<!--list为存放映射到数据库的实体类 集合-->
<list>
<!--class为添加的映射到数据库的 实体类 的全路径,这先不写,创建好实体类后再添加-->
<mapping class=""/>
</list>
</litepal>
1.3 创建一个全局的BaseApplication,并让它继承LitePalApplication,并在清单文件中注册BaseApplication,如下图:
2. LitePal的增删改查
2.1 初始化java实体类,并让其继承DataSupport
/**
* Created by bai-qiang.yang on 2017/2/27.
*/
public class News extends DataSupport{
private int id;
private String title;
private String content;
private Date publishDate;
private int commentCount;
public void setId(int id) {
this.id = id;
}
public void setTitle(String title) {
this.title = title;
}
public void setContent(String content) {
this.content = content;
}
public void setPublishDate(Date publishDate) {
this.publishDate = publishDate;
}
public void setCommentCount(int commentCount) {
this.commentCount = commentCount;
}
public int getId() {
return id;
}
public String getTitle() {
return title;
}
public String getContent() {
return content;
}
public Date getPublishDate() {
return publishDate;
}
public int getCommentCount() {
return commentCount;
}
}
2.2 在litepal.xml文件中将实体类映射到数据库中
<?xml version="1.0" encoding="utf-8"?>
<litepal>
<!--BookStore为数据库名称-->
<dbname value="BookStore" ></dbname>
<!--1为版本号-->
<version value="1" ></version>
<!--list为存放映射到数据库的实体类 集合-->
<list>
<!--com.viciy.litpal.News为添加的映射到数据库的 实体类 的全路径-->
<mapping class="com.viciy.litpal.News"/>
</list>
</litepal>
2.3 创建实体类进行CRUD
2.3.1 增
News news = new News();
news.setId(1);
news.setCommentCount(2);
news.setContent("人长得漂亮?太搞笑了。。。");
news.setTitle("我是新闻,我姓沈");
news.setPublishDate(new Date());
//调用save()方法保存数据,save()继承自DataSupport
if (news.save()) {
Toast.makeText(this, "保存成功", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "保存失败", Toast.LENGTH_SHORT).show();
}
2.3.2 删
//根据id删除
DataSupport.delete(News.class,id);
//根据约束条件删除
DataSupport.deleteAll(News.class, "content = ?","人长得漂亮?太搞笑了。。。");
2.3.3 改
News news = new News();
news.setContent("就是长得漂亮");
news.updateAll("title = ?","我是新闻,我姓沈");
2.3.4 查
//查询所有数据
List<News> all = DataSupport.findAll(News.class);
//查询第一条数据
News first = DataSupport.findFirst(News.class);
//查询最后一条数据
News last = DataSupport.findLast(News.class);
//select()方法,用于指定查询哪几列数据
List<News> newses = DataSupport.select("content", "title").find(News.class);
//limit方法用于指定查询结果的数量
List<News> newses = DataSupport.limit(2).find(News.class);
//offset()方法用于指定查询结果的偏移量,比如查询表中的第2条,第3条数据,就可以这样写:
List<News> newses = DataSupport.offset(1).limit(2).find(News.class)
//where()方法用于指定查询的约束条件
List<News> newses = DataSupport.where("id > ?", "1").find(News.class);
//order()方法用于指定结果的排序方式,"desc"---->降序,"asc"或者不写---->升序
List<News> newses = DataSupport.order("id desc").find(News.class);
List<News> newses = DataSupport.order("id").find(News.class);
//连缀组合进行复杂查询
List<News> newses = DataSupport.where("id > ?", "1")
.select("title", "content")
.offset(1)
.limit(2)
.order("id desc")
.find(News.class);