一,快速配置
1,引入Jar包或源码
首先我们需要将LitePal的jar包引入到项目当中,可以点击这里查看LitePal的最新版本
dependencies {
compile 'org.litepal.android:core:1.3.1'
}
2, 配置litepal.xml
在项目的assets目录下面新建一个litepal.xml文件
<?xml version="1.0" encoding="utf-8"?>
<litepal>
<dbname value="demo" ></dbname>
<version value="1" ></version>
<list>
<mapping class="com.test.model.Reader"></mapping>
<mapping class="com.test.model.Magazine"></mapping>
</list>
</litepal>
3,配置LitePalApplication
由于操作数据库时需要用到Context,而我们显然不希望在每个接口中都去传一遍这个参数,那样操作数据库就显得太繁琐了。因此,LitePal使用了一个方法来简化掉Context这个参数,只需要在AndroidManifest.xml中配置一下LitePalApplication,所有的数据库操作就都不用再传Context了,如下所示:
<manifest>
<application
android:name="org.litepal.LitePalApplication"
...
>
...
</application>
</manifest>
如果有自己的Application,继承它就行了。
二,建表
public class News extends DataSupport{
private int id;
private String title;
private String content;
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;
}
}
其中id这个字段可写可不写,因为即使不写这个字段,LitePal也会在表中自动生成一个id列,毕竟每张表都一定要有主键的嘛。
根据LitePal的数据类型支持,可以进行对象关系映射的数据类型一共有8种,int、short、long、float、double、boolean、String和Date。只要是声明成这8种数据类型的字段都会被自动映射到数据库表中,并不需要进行任何额外的配置。
如果News类中有一个字符串字段我并不想让它映射到数据库表中,这该怎么办呢?对此,LitePal同样采用了一种极为轻量的解决方案,只有声明成private修饰符的字段才会被映射到数据库表中,如果你有某一个字段不想映射的话,只需要将它改成public、protected或default修饰符就可以了。
然后编辑litepal文件
<litepal>
<dbname value="demo"></dbname>
<version value="1"></version>
<list>
<mapping class="com.app.liulongbing.green.News"></mapping>
</list>
</litepal>
三,存储
private void add() {
News news = new News();
news.setTitle("test");
news.setContent("1234");
news.save();
}
四,查询数据
查询news表中id为1的这条记录
News news= DataSupport.find(News.class,1);
获取news表中的第一条数据或者最后一条数据:
News news= DataSupport.findFirst(News.class);
News news= DataSupport.findLast(News.class);
查询所有的
List<News> allNews=DataSupport.findAll(News.class);
连缀查询
List<News> newsList = DataSupport.select("title", "content")
.where("commentcount > ?", "0")
.order("publishdate desc").limit(10).offset(10)
.find(News.class);
五,修改数据
修改id为1的
News news=new News();
news.setTitle("上海");
news.update(1);
将title=上海的所有新闻全部改掉
News news=new News();
news.setTitle("上海今天下雨");
news.updateAll("title=?","上海");
六,删除数据
删除id为1的
DataSupport.delete(News.class,1);
删除title为**的所有新闻
DataSupport.deleteAll(News.class, "title = ?", "**");