LitePal
概述
- LitePal是一款开源的Android数据库框架,它采用了对象关系映射(ORM)的模式,并将我们平时开发时最常用到的一些数据库功能进行了封装,使得不用编写一行SQL语句就可以完成各种建表、増删改查的操作。并且LitePal很“轻”,jar包只有100k不到
添加依赖
implementation 'org.litepal.guolindev:core:3.2.3'
使用
初始化数据库
一、在Application里面进行初始化操作
class BaseApp : Application() {
override fun onCreate() {
super.onCreate()
LitePal.initialize(this)
}
}
二、建立ORM对象
data class Course(
val name: String,
val teacher: String,
val price: Double,
val date: Date
) : LitePalSupport() {
val id: Long = 0
override fun toString(): String {
return "Course(id=$id, name=$name, teacher=$teacher, price=$price, date=$date)"
}
}
data class Teacher(
val name: String,
val age: Int,
val desc: String
) : LitePalSupport() {
val id: Long = 0
}
三、配置文件
在assets
目录下新建litepal.xml
文件,并在其配置数据
<?xml version="1.0" encoding="utf-8"?>
<litepal>
<dbname value="mylitepal" />
<version value="1" />
<list>
<mapping class="com.example.myapplication.litepal.Course" />
<mapping class="com.example.myapplication.litepal.Teacher" />
</list>
</litepal>
增加数据
增加一条数据
val course = Course("Java", "小红", 12.04, Date())
course.save()
增加多条数据
val courseList = arrayListOf<Course>()
courseList.add(Course("JavaScript", "小花", 23.06, Date()))
courseList.add(Course("HTML", "小白", 13.06, Date()))
courseList.add(Course("CSS", "小黑", 33.06, Date()))
LitePal.saveAll(courseList)
删除数据
删除指定id数据
LitePal.delete(Course::class.java, 1)
删除添加数据
LitePal.deleteAll(Course::class.java, "teacher = ? and id > 1", "小花")
删除表内所有数据
LitePal.deleteAll(Course::class.java)
修改数据
修改指定id数据
val values = ContentValues().apply {
put("teacher", "小白")
}
LitePal.update(Course::class.java, values, 1)
修改指定条件数据
val values = ContentValues().apply {
put("teacher", "小👋")
}
LitePal.updateAll(Course::class.java, values, "name = ? and id > 5", "CSS")
查询数据
简单查询
//查询id为1的数据
val course = LitePal.find(Course::class.java, 1)
binding.tvContent.text = course.toString()
//查询表内第一条数据
val course2 = LitePal.findFirst(Course::class.java)
binding.tvContent.text = course2.toString()
//查询表内所有数据
val courseList = LitePal.findAll(Course::class.java)
binding.tvContent.text = courseList.toString()
条件查询
val courseList = LitePal.where("id > ?", "5")
.order("price desc")
.find(Course::class.java)
binding.tvContent.text = courseList.toString()
事务支持
try {
LitePal.beginTransaction()
val course = LitePal.find(Course::class.java, 2)
val values = ContentValues().apply {
put("price", 100.01)
}
LitePal.update(Course::class.java, values, course.id)
LitePal.setTransactionSuccessful()
} catch (e: Exception) {
e.printStackTrace()
} finally {
LitePal.endTransaction()
}
数据库升级
新增表
一、新建ORM对象
data class Comment(val content: String) : LitePalSupport() {
val id: Long = 0
}
二、添加配置
<?xml version="1.0" encoding="utf-8"?>
<litepal>
<dbname value="mylitepal" />
<version value="2" />
<list>
<mapping class="com.example.myapplication.litepal.Course" />
<mapping class="com.example.myapplication.litepal.Teacher" />
<mapping class="com.example.myapplication.litepal.Comment" />
</list>
</litepal>
注:可以通过调用Connector.getDatabase()
触发数据库更新
新增表字段
直接修改ORM类,并更新配置文件版本号
data class Course(
val name: String,
val teacher: String,
val price: Double,
val date: Date,
@Column(defaultValue = "很好") val comment: String //新增字段
) : LitePalSupport() {
val id: Long = 0
}