介绍:
LitePal是一款开源的Android数据库框架,它采用了对象关系映射技术(ORM)的模式,并将我们平时开发最常用到的数据库功能进行了封装,使得不用编写一行SQL语句就可以完成各种建表和增删改查的操作.
LitePal 的项目主页上也有详细的使用文档,地址是:https://github.com/LitePalFramework/LitePal
技能1:使用LitePal:
- 第一步:在Android studio中对开源库的引用就可以了
在app/build.gradle文件中,对dependencies闭包中添加如下引用
dependencies {
compile 'org.litepal.android:core:2.0.0'
}
- 添加的这行声明中,前面部分是固定的,最后的2.0.0是版本号的意思,最新的版本号可以到LitePal的项目主页上去查看
这样我们就成功引入到当前项目中了
- 第二步:配置litepal.xml文件.
右击app/src/main目录 new->Directory创建一个assets目录,然后再assets目录下再创建一个litepal.xml文件,接着编辑litepal.xml文件中的内容,内容如下
<?xml version = "1.0" encoding = "utf-8" ?>
<litepal>
<dbname value = "cool_weather"/>
<version value = "1"/>
<list>
</list>
</litepal>
- 其中
<dbname> 标签用于指定数据库名
<version>标签用于指定数据库版本号
<list>标签用于指定所有的映射模型
<mapping>标签用于声明我们要配置的映射模型类,注意一定要使用完整的类名(在Android studio 中对着类名右键,copy reference 复制完整的类名),不管有多少个模型类需要映射,都使用同样的方式配置在<list>标签下
- 最后一步:配置LitePalApplication,修改AndroidManifest.xml 中的代码,加入android:name="org.litepal.LitePalApplication
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="test.study.wzm.coolweather">
<uses-permission android:name="android.permission.INTERNET" />
<application
android:name="org.litepal.LitePalApplication"
android:allowBackup="true"
android:icon="@mipmap/logo"
通过以上的配置,已经可以让LitePal的所有功能都正常工作了
技能2:创建和升级数据库
- 刚才在介绍的时候说过,LitePal采取的是对象关系映射(ORM)的模式,那么什么是对象关系映射?简单点来说,我们使用的编程语言是面向对象语言,而使用的数据库则是关系型数据库,那么将面向对象的语言和面向关系的数据库之间建立一种映射关系,这就是对象关系映射.
那么我们就可以通过面对对象的思维来操作数据库,而不用再和SQL语句打交道了.
- 定义一个City类
import org.litepal.crud.DataSupport;
public class City extends DataSupport {
private String cityName;//市名字
private int cityCode;//市代号
private int provinceId;//当前市所属于省的id值
public String getCityName() {
return cityName;
}
public void setCityName(String cityName) {
this.cityName = cityName;
}
public int getCityCode() {
return cityCode;
}
public void setCityCode(int cityCode) {
this.cityCode = cityCode;
}
public int getProvinceId() {
return provinceId;
}
public void setProvinceId(int provinceId) {
this.provinceId = provinceId;
}
}
- 这是一个典型的java bean ,在City类中我们定义了各成员变量,并生成了setter getter方法. City类就会对应数据库中的City表,而类中的每一个成员变量分别对应了表中的每一列,这就是对象关系映射最直观的体验.
- 仅有这样还不行,我们要在litepal.xml中添加City类到映射中去,在list标签中加入
<list>
<mapping class = "test.study.wzm.coolweather.db.City"/>
</list>
- 这样就已经把所有工作都完成了,在需要创建数据库和表的逻辑里执行代码
LitePal.getDatabase();
- 就将数据库和表都创建完成了.
升级数据库中的表
- 修改你想改的任何内容,然后将litepal.xml中的<version>版本号加1即可
比如我们想在city表中添加一个id列,直接修改City类中的代码,加入成员变量id,并添加setter和getter方法
private int id;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
<version value = "2"/>
- 重新运行创建数据库逻辑即可升级数据库成功
添加数据
- 所有的数据库表都要继承DataSupport类才能进行增删查改
1,创建出模型类的实例
2,将所有要存储的数据设置好
3,最后调用一下save方法保存.
City city = new City();
city.setId(001);
city.setCityName("广州");
city.setCityCode(9527);
city.save();
更新数据
- 1.new出实例
2.直接调用setter方法设置要更新的数据
3.最后调用updateAll方法执行更新操作.
- 注意: updateAll方法中可以指定一个条件约束,和SQL中where参数有点类似,但是更加简洁,如果不指定条件语句的话,表示更新所有数据.
City city = new City();
city.setId(002);
city.updateAll("cityName = ? and cityCode = ?","广州","9527");
将符合条件是广州和9527的数据进行更新为id = 2;
将字段值设置为默认值时,只能调用setToDefault()方法,接收一个参数,传入相应的列名
City city = new City();
city.setToDefault("provinceId");
city.updateAll();
这段代码将所有的provinceId都更新为0,因为updateAll()方法中没有指定约束条件,所以更新操作对所有数据都生效.
删除数据
DataSupport.deleteAll(city.class,"cityCode < ?","9526");
deleteAll()方法第一个参数用于指定删除哪张表中的数据,
第二个参数用于指定约束条件,删除city表中cityCode低于9526的城市.
如果不指定约束条件,则删除表中所有的数据.
查询数据
- 调用DataSupport.findAll()方法,返回一个List集合,接收一个参数,指定查询哪个表.
List<City> cities = DataSupport.findAll(City.class);
for( City city: cities){
log.d("MainActivity","city name is "+ city.getCityName());
}
-
除了findAll方法外,LitePal还提供了很多其他非常有用的api,比如我们想查City表中的第一条数据就可以这样写:
City firstCity = DataSupport.findFirst(city.class); -
查 City表中的最后一条数据可以这样写:
City lastCity = DataSupport.findLast(city.class); -
还可以通过连缀查询来定制更多的查询功能:
-
select()方法用于指定查询哪几列的数据,对应了SQL当中的select关键字,比如只查cityName和id
List<City> cities = DataSupport.select("cityName","id").find(city.class); -
where()方法用于指定查询的约束条件,对应SQL当中的where关键字.比如只查cityCode大于9526的数据,
List<City> cities = DataSupport.where("cityCode > ?","9526").find(city.class); -
order()方法用于指定结果的排序方式,对应SQL当中的order by 关键字.比如将查询结果按照id从高到低排序,可以这样写:
List<City> cities = DataSupport.order("id desc").find(city.class);
其中desc表示降序排列,asc或者不写表示升序排列 -
limit()方法用于指定查询结果数量,比如只查表中的前3条数据
List<City> cities = DataSupport.limit(3).find(city.class); -
offset()方法用于指定查询结果的偏移量,比如查询表中的第2,3,4条数据
List<City> cities = DataSupport.limit(3).offset(1).find(city.class); -
当然可以对这5个方法进行任意的连缀组合,完成一个比较复杂的查询操作
List<City> cities = DataSupport.select("cityName","id")
.where("cityCode > ?","9526")
.order("id")
.limit(10)
.offset(10)
.find(city.class);
查询city表中,第11~20条满足cityCode大于9526这个条件的cityName和id这两列数据,并将查询结果按照页面升序排列.
Litepal的查询还支持原生SQL来进行查询:
Cursor c = DataSupport.findBySQL("select * from City where cityCode > ? and id < ?","9526","20")
网友评论