数据库存储之LitePal

数据库存储之LitePal

LitePal是一款开源的Android数据库框架,其采用了对象关系映射(ORM)的模式,并将平时开发最常用的一些数据库功能进行了封装,使得不用编写一行SQL语句也可以完成各种建表和CRUD操作。Github地址:https://github.com/LitePalFramework/LitePal
一、配置LitePal
编辑build.gradle文件,在dependecies闭包中添加一下内容,其中的3.0.0为LitePal的版本,最新版本上LitePal的github上查看。
在这里插入图片描述
将LitePal成功引入到当前项目中,接下来需要配置litepal.xml文件。在app/src/main/assets目录下(若assets目录不存在,则创建),创建litepal.xml文件,编辑该文件如下。
在这里插入图片描述
其中,标签用于指定数据库名,标签用于指定数据库版本号,标签用于指定所有的映射模型
最后需要配置一下AndroidManifest.xml,设置application的为LitePalApplication或者自定义一个Application类其中调用LitePal的initialize()方法对LitePal进行初始化。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、创建和升级数据库
LitePal采取的是对象关系映射(ORM)的模式,简单的来说,我们使用的编程语言是面向对象语言,使用的数据库则是关系型数据库,那么将面向对象的语言与面向关系的数据库之间建立一种映射关系,就是对象关系映射。
定义一个Book类如下,其中定义了id、author、price、pages以及name变量,并生成对应的getter和setter方法。
在这里插入图片描述
Book类即对应数据库中Book数据表,而类中的每个字段对应表中的每一列。将Book类添加到映射模型列表当中,修改litepal.xml如下。
在这里插入图片描述
准备工作完毕,只要进行任意一次数据库操作,BookStore.db数据库就会自动创建出来,如下调用LitePal的getDatabase()方法,数据库在不存在的情况下会被自动创建。
在这里插入图片描述
不同于SQLite的升级方式,LitePal对数据库的升级,只需要将litepal.xml中的version标签中的value即版本号进行叠加,LitePal会自动升级。
而值得注意的是,SQLite中通过onUpgrade()方法的升级会删除原本数据库中的所有数据,而LitePal保留之前表中的所有数据,从而避免了数据丢失的问题。

三、使用LitePal添加数据
使用LitePal添加数据,只需要创建模型类的实例,再将所有存储的数据设置好,调用**save()**方法即可插入数据,例子如下。
在这里插入图片描述

四、使用LitePal更新数据
LitePal更新数据的方式有两种,一种是对已存储对象重新设值;另一种是通过LitePalSupport提供的**updateAll()**方法进行更新。

  1. 对已存储对象重新设值进行更新
    对于LitePal来说,对象是否已经存储是根据调用model.isSaved()方法的结果来判断的,若为true表示已存储;否则表示未存储。
    实际上只有两种情况下model.isSaved()方法才会返回true,一种情况是
    已经调用过model.save()方法去添加数据
    ,此时的model会被认为是已存储的对象。另一种情况是model对象是通过LitePal提供的查询API查询出来的。
    基于第一种情况有如下例子,当再次调用save()方法时,LitePal会发现当前对象已存储,因此并不会进行数据的添加,而是进行数据的更新。
    在这里插入图片描述
  2. 使用updateAll()方法进行更新
    对已存储对象进行的更新操作限制较大,LitePalSupport提供了updateAll()方法用于更新。更新例子如下。
    在这里插入图片描述
    updateAll()方法可以
    指定一个条件约束
    ,与SQLite中的update()方法的where参数部分有点类似,但更为简洁,如果不指定条件语句的话,就表示更新所有数据。
    需要注意的一点是,当需要把某个字段设置成默认值时,不可以使用set方式来设置数据,LitePal统一提供了一个**setToDefault()**方法,传入相应的列名即可实现设置默认值。
    在这里插入图片描述

五、使用LitePal删除数据
使用LitePal删除数据的方式主要有两种,一种是直接调用已存储对象的delete()方法即可;另一种则是使用LitePal提供的deleteAll()方法。
对于deleteAll()方法的使用方式如下所示。
在这里插入图片描述
deleteAll()方法第一个参数用于
指定删除数据对应的表
,其后的参数表示约束条件。另外,如果不指定条件,deleteAll()则会删除表中的所有数据。

六、使用LitePal查询数据
同样是查询数据,相比于SQLite的query()方法冗长的参数,LitePal提供了findAll()方法更为简洁,并且其返回的是List对象,方便操作,例子如下。
在这里插入图片描述
除了findAll()方法之外,LitePal还提供了其他的查询API,例如findFirst()方法可用于查询第一条数据;findLast()方法可用于查询最后一条数据。
而对于有条件的查询,LitePal提供了一系列的查询方法供使用:
 select()方法用于
指定查询哪几列的数据

 where()方法用于
指定查询的条件

 order()方法用于指定结果的排序方式
 limit()方法用于指定查询结果的数量
 offset()方法用于指定查询结果的偏移量
通过使用以上方法,进行任意的连缀组合即可完成比较复杂的查询操作。
在这里插入图片描述
另外,如果上述API满足不了需求,LitePal还支持原生的SQL进行查询,如下所示。
在这里插入图片描述

七、定义table的更多设置
数据库中对数据表的操作有很多的设置,比如设置主键,默认值等。而LitePal对数据表中字段的设置是通过注解来实现的,如下所示。
在这里插入图片描述

参考资料:《第一行代码 Android 第2版》
LitePal的Github官方文档

猜你喜欢

转载自blog.csdn.net/weixin_38196407/article/details/89670981
今日推荐