LitePal简单使用

LitePal:

一、创建新数据库

导入依赖

implementation 'org.litepal.guolindev:core:3.1.1'
  1. 由于操作数据库时需要用到Context,而我们显然不希望在每个接口中都去传一遍这个参数,那样操作数据库就显得太繁琐了。因此,LitePal使用了一个方法来简化掉Context这个参数,只需要整个项目使用的是LitePalApplication,所有的数据库操作就都不用再传Context了,直接使用当前对象即可,如下所示:
class MyApplication: LitePalApplication() {
}

然后在清单文件配置中的application标签中加android:name=".MyApplication"
2. LitePal采取的是对象关系映射(ORM)的模式,根据对象关系映射模式的理念,每一张表都应该对应一个模型(Model),也就是说,如果我们想要建一张news表,就应该有一个对应的News模型类。新建一个News类,如下所示:

data class News(var id:Int, var title:String, var content:String, var publishDate:Date, var commentCount:Int)

LitePal的所有映射都是自动完成的,无需编写映射文件,根据LitePal的数据类型支持,可以进行对象关系映射的数据类型一共有8种,int、short、long、float、double、boolean、String和Date。
3. 编写配置文件:
添加assets目录下的litepal.xml文件

<?xml version="1.0" encoding="utf-8"?>
<litepal>
    <!--配置数据库名-->
    <dbname value="demo"></dbname>
    <!--配置版本-->
    <version value="1"></version>
    <!--加入模型类声明-->
    <list>
        <mapping class="com.example.ha.News"></mapping>
    </list>
</litepal>
  1. 然后即可获取SQLiteDatabase实例,即可创建出对应数据库和表
val database = Connector.getDatabase()

二、更新数据库

  1. 好了现在数据库版本1已经有了,接下来我们更新数据库,添加新表:
data class Comment(var id: Int, var content: String)
  1. 添加模型、更改版本号+1:
<?xml version="1.0" encoding="utf-8"?>
<litepal>
<dbname value="demo"></dbname>
<version value="2"></version>
<list>
    <mapping class="com.example.ha.News"></mapping>
    <mapping class="com.example.ha.Comment"></mapping>
</list>
</litepal>

然后再次执行val database = Connector.getDatabase()
更新表中的列后也只需修改版本号。
另外,如果想删除某一张表的话,操作也很简单,在litepal.xml中的映射列表中将相应的类删除即可。

多表关联操作

需要以下几个模型:
News(新闻) Introduction(新闻内容) Category (新闻种类)Comment(新闻评论)

  • 关系:
    1. 新闻和新闻内容一对一,结论:News中需要包含Introduction的依赖或者Introduction中需要包含News的依赖
    2. 新闻可属于多个种类,同时一个新闻种类下包含很多新闻,结论:News中包含List<Category>的依赖,Category包含List<News>的依赖
    3. 每条新闻拥有多个评论,结论:News中包含List<Comment>的依赖,Comment中包含News依赖

模型如下

data class News(
    val id: Int?,
    val title: String,
    val content: String,
    val publishDate: Date,
    val commentCount: Int,
    val introduction: Introduction?,
    val commentList:ArrayList<Comment> = ArrayList<Comment>(),
    val categoryList:ArrayList<Category> = ArrayList<Category>()
)
data class Introduction(val id: Int, val guide: String, val digest: String)
data class Category(val id: Int, val name: String, val newsList:ArrayList<News> = ArrayList<News>())
data class Comment(val cm: String,val news: News?)

更新配置文件:

<litepal>
<dbname value="demo"></dbname>
<version value="3"></version>
<list>
    <mapping class="com.example.ha.News"></mapping>
    <mapping class="com.example.ha.Comment"></mapping>
    <mapping class="com.example.ha.Introduction"></mapping>
    <mapping class="com.example.ha.Category"></mapping>
</list>
</litepal>
生成表如下

在这里插入图片描述
category表:
在这里插入图片描述
其中category_news为自动生成的中间表:
在这里插入图片描述
comment表:
在这里插入图片描述
introduction表:
在这里插入图片描述
news表:
在这里插入图片描述

三、

操作数据前需要做的一件事就是:
将所有的实体类继承LitePalSupport这个类,继承了LitePalSupport类之后,这些实体类就拥有了进行CRUD操作的能力,调用里面的api执行相应的数据库处理

data class News(
    val id: Int?,
    val title: String,
    val content: String,
    val publishDate: Date,
    val commentCount: Int,
    val introduction: Introduction?,
    val commentList:ArrayList<Comment> = ArrayList<Comment>(),
    val categoryList:ArrayList<Category> = ArrayList<Category>()
):LitePalSupport()
data class Introduction(val id: Int, val guide: String, val digest: String):LitePalSupport()
data class Category(val id: Int, val name: String, val newsList:ArrayList<News> = ArrayList<News>()):LitePalSupport()
data class Comment(val cm: String,val news: News?):LitePalSupport()

插入数据:

val news = News(1,"清仓大甩卖","全场2折", Date(), 20, null)
if (news.save()) println("成功") else println("失败")
//使用saveThrows()可抛出异常信息

多表插入:

val comment1 = Comment("好评", null)
comment1.save()
val news = News(null,"全面小康","牛逼", Date(), 20, null)
news.commentList.add(comment1)
if (news.save()) println("成功,${news.id}}") else println("失败")

comment表:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值