本文简单演示下如何在Kotlin代码中使用LitePal。
首先要定义一个实体类,以Book类为例。比如Book类中有继承自LitePalSupport类的id、name、page三个字段,如下所示:
class Book(val name: String, val page: Int) : LitePalSupport() {
val id: Long = 0
}
需要注意的是,如果你的实体类中需要定义id这个字段,不要把它放到构造函数当中,因为id的值是由LitePal自动赋值的,而不应该由用户来指定。因此这里我们在Book类的内部声明了一个只读类型的id。
然后需要在litepal.xml中声明一下这个实体类:
<list>
<mapping class="org.litepal.litepalsample.model.Book" />
</list>
接下来可以进行CRUD操作。首先是存储操作,代码如下所示:
val book = Book("第一行代码", 552)
val result = book.save()
Log.d(TAG, "save result is $result , book id is ${book.id}")
可以看到,这里我们先创建了一个Book的实例,并传入书名和页数,然后调用save()方法就可以将这条数据存储到数据库中了。存储结束后这里还用一条打印日志打印出了执行结果,如下所示:
D/MainActivity: save result is true , book id is 1
可以看到,这里显示存储成功,并且book的id值变成了1,说明LitePal在存储成功之后自动给id赋值了。
接下来是修改操作,代码如下所示:
val cv = ContentValues()
cv.put("name", "第二行代码")
cv.put("page", 570)
LitePal.update(Book::class.java, cv, 1)
其实基本上Kotlin上的用法和Java都是类似的,只是具体语法可能有些不太一样。就比如update()方法接收的第一个参数是个Class对象,在Java中是传入Book.class,而在Kotlin中则是传入Book::class.java。
下面看一下删除操作,代码如下所示:
LitePal.delete(Book::class.java, 1)
这里要删除id为1的这条记录。当然除了按照id删除以外,还可以按照其他任意条件去删除,比如想把页数大于500的书全部都删掉,那么就可以这么写:
LitePal.deleteAll(Book::class.java, "page > ?", "500")
最后,再向演示一下查询的操作。由于现在数据库中已没有数据可查,那么我们先向库中添加两条数据,然后再执行查询操作,代码如下所示:
Book("第一行代码", 552).save()
Book("第二行代码", 570).save()
LitePal.findAll(Book::class.java).forEach {
Log.d(TAG, "book name is ${it.name} , book page is ${it.page}")
}
这里调用了findAll()方法,将Book表中的所有数据都查询了出来。查询的结果是一个List集合,因此又用了Kotlin中的forEach循环将查询到的每条记录都打印了出来。执行结果如下所示:
D/MainActivity: book name is 第一行代码 , book page is 552
D/MainActivity: book name is 第二行代码 , book page is 570
当然,除了调用findAll()方法之外,还可以使用LitePal的连缀查询来对查询条件进行任意地定制:
LitePal.where("name like ?", "第_行代码")
.order("page desc")
.limit(5)
.find(Book::class.java)
这样就将在Kotlin中使用LitePal进行CRUD操作全部都演示完了,感觉和Java中一样的简单和方便。