当前位置: 首页 > 工具软件 > LitePal > 使用案例 >

第六章 数据持久化技术之LitePal

汪建德
2023-12-01

新手日记,希望和我一样的小白看了之后有一些收获,也希望有人可以帮我发现问题!可以帮我更深入原理,本人纯小白!

目录

一、LitePal简介

1.1 什么是LitePal?

1.2 LitePal有什么用?

二、配置LitePal到当前项目当中

2.1 为什么要配置?

2.2 如何配置配置,步骤?

三、创建数据库

三、升级数据库

四、添加数据

五、更新数据

六、删除数据

七、查询数据

总结


一、LitePal简介

1.1 什么是LitePal?

LitePal就是一个库,那库是什么?回想一下在IDEA中的library,好像就是一个库,然后我们会将很多jar包加到里面,比如我们会将mysql的jar加进去,然后可以直接利用库中里面的各种类。这个LitePal就是一个开源库,我们在github上面拿到的。

然后它采用的是对象关系映射(orm)的模式,对象关系映射,是一种面向对象的思想。

1.2 LitePal有什么用?

它的用处就是我们可以以面向对象的思想对数据进行crud操作,而不用写错误频出的sql语句就可以直接操作当前app下的数据库了,进行数据库表的创建和升级,以及对数据的crud。极大程度上提高了开发的效率。

其实在这里就是定义java类(实体类,javabean),当成数据库里面的一张表,并且这个类中的属性就是表里面的字段,对属性值操作就是对表里面的数据进行操作!

二、配置LitePal到当前项目当中

2.1 为什么要配置?

因为这并不是安卓中自带的,很多不是安卓自带的就是需要引入进来才能使用的。像androidx,这些都是……都是需要导入进来的。

2.2 如何配置配置,步骤?

2.2.1  首先在github上面找到这个库的像地址一样的东西,然后版本号这些。

'org.litepal.guolindev:core:3.2.3' 【疑问】这里的org是什么意思,有点熟悉……,好像和com是一样的东西,域名?

2.2.2  在app目录下的build.gradle中一个闭包中进行配置,也被叫做添加依赖

implementation 'org.litepal.guolindev:core:3.2.3'。org.litepal.guolindev都是一样的,应该就是和com.example.litepaltest差不多,后面的core是版本号。

2.2.3   然后需要在/app/src/main/下面建立一个资产assets目录,其实这也就代表着这是属于我们的“资产”,我们可以用了。

2.2.4 然后在资产目录下建立一个litepal.xml文件(这里需要注意建立一个普通文件然后结尾命名.xml就行了,不要用as中快捷方式创建Android Resource File.xml)

2.2.5  然后在litepal.xml中配置信息,表示这个就是我们要用litepal操作的数据库和一些表!

dbname表示我们用这个Litepal来操作的某个数据库,version表示版本,list下面就是我们要操作的表了,只不过是一个javabean的对象的形式存在的,这也是这个litepal的特色了。mapping就是映射的意思!一个类映射一个表,类的属性映射表的字段!

<?xml version="1.0" encoding="utf-8"?>
<litepal>
    <dbname value="BookStore" ></dbname>
    <version value="1" ></version>
    <list>
        <mapping class="com.example.litepaltest.Book"></mapping>
    </list>
</litepal>

2.2.6 最后需要在application的清单文件里面表示添加一个name属性,这样我们当前这个应用就可以使用这个LitePal了。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.litepaltest">

    <application
        android:name="org.litepal.LitePalApplication"
        …………
    </application>

</manifest>

完成以上的操作,那么我们就算可以使用这个LitePal对我们的库和表进行初始化(创建,升级)的操作了。


三、创建数据库

相比起之前的复杂步骤,使用LitePal创建数据库只需要一行代码。但是在创建之前我们先要保证这个数据库没有被创建过啊,它才会创建。并且需要提前在assets目录下的litepal.xml文件中声明数据库的名称<dbname>还有表的名称<mapping>,版本号<version>。然后在任何地方调用Connector.getDatabase()方法就会返回一个这个数据库对象了,如果这个数据库没有创建那么就会去创建了,但是如果创建过就不会在创建了。底层应该就是去调用了构造方法创建库和当中的onCreate方法初始化库,这里相当于进行了封装。

下面为一个javabean类,对应的就是一个表。

public class Book {
    private int id;
    private String author;
    private double price;
    private int pages;
    private String name;

  //set和get方法……

调用Connector.getDatabase()方法就会返回一个可写的数据库对象了,如果不存在这个数据库,那么就会创建一个。Connector:The connector to connect database provided by LitePal. Users can use this class to get the instance of SQLiteDatabase.一个由LitePal提供来和数据库进行连接的类,通过它可以拿到一个SQLiteDatabase实例。

8.15更新:现在是直接使用LitePal.getDatabase()方法来返回一个可写的数据库操作对象了!注意学习最新的官方文档:https://codechina.csdn.net/mirrors/litepalframework/litepal?utm_source=csdn_github_accelerator

        create_database.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Connector.getDatabase();
        });

三、升级数据库

升级数据主要就是体现在两个方面:1 为库中添加新表 2为原来的表添加新的字段

添加新类,其实就是添加新表

public class Category {
    private int id;
    private String CategoryName;
    private String CategoryCode;
    //set和get方法

为原来的类添加属性,其实就是为原来的表添加字段

public class Book extends LitePalSupport {
    private int id;
    private String author;
    private double price;
    private int pages;
    private String name;
    private String press;//新字段

然后想要升级,其实底层也就是想让onUpdate方法执行,那么就得让系统检测到版本发生了变化,那么此时我们就要在LitePal.xml文件中对版本进行更改了。并且添加多了一张表就多了一个映射关系,也需要在里面添加。

<?xml version="1.0" encoding="utf-8"?>
<litepal>
    <dbname value="BookStore" ></dbname>
    <version value="2" ></version>
    <list>
        <mapping class="com.example.litepaltest.Book"></mapping>
        <mapping class="com.example.litepaltest.Category"></mapping>
    </list>
</litepal>

然后再次执行Connector.getDatabase()方法时,系统发现发生版本号发生了变化,然后就会去执行onUpdate()方法了。

update_database.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Connector.getDatabase();
            }
        });

然后以上操作,就将数据库创建和数据库升级利用Connector.getDatabase()方法执行完毕了,接下来就是要对数据库进行crud操作了。


四、添加数据

1、首先需要先让我们的java类,也就是对应库中的表的java类来继承LitePalSupport。LitePalSupport:LitePalSupport connects classes to SQLite database tables 这个类用来连接数据库中的表。 In the context of an application, these classes are commonly referred to as models.这些类也被称作模型;LitePalSupport relies heavily on naming in that it uses class and association names to establish mappings between respective database tables;LiteSupport非常依赖于命名,也就是类名就是表名。(注意这里已经和书里面的不一样了,DataSupport已经废弃了)

import org.litepal.crud.LitePalSupport;

public class Book extends LitePalSupport{
        //代码片段
    }

2、然后我们需要创建这个类的对象,因为它继承自LiteSupport,说明它也是一个LiteSupport了。那么这个对象就可以操作与之类名一样的表了。然后调用这个对象的set方法,为这个表的字段添加数据,最后记得要用save()方法来保存!非常好理解。

add_data.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Book book = new Book();
                book.setId(1);
                book.setName("how to win");
                book.setPages(600);
                book.setPrice(12.5);
                book.setPress(null);
                book.save();
            }
        });

这样数据就被添加进去了,采用adb命令就可以发现这个数据库里面的这个表有数据了。

五、更新数据

有好几种方法,有一点很重要,就是哪个库中的哪个表一定要知道在哪里指明了,这里库就是在LitePal.xml中指明了,表就是用类名来指明了。

1  第一种就是在找到那个原来的存储对象来对里面的数据进行更新,再次save会覆盖。

2  第二种就是调用这个对象的updateAll()方法,更新所有符合我们写的条件的条目。

3 第三种是最新的,就是直接用LitePal来直接进行操作(和删除操作一样,都是最新的,两个方法,一个根据id删一条,一个根据条件删除全部符合条件的)。

        update_data.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

//                更新表中数据的第一种方式
//                Book book = new Book();
//                book.setName("how to fail");
//                book.setPages(1);
//                book.setPrice(199.9);
//                book.setAuthor("jackson li");
//                book.setPress("unknown");
//                book.save();
//                book.setAuthor("jack ma");
//                book.save();

//                更新表中数据的第二种方式
                Book book = new Book();
                book.setAuthor("jack chen");
                book.setPrice(299.9);
                book.updateAll("name=? and author=?","how to fail","jack ma");
                
            }
        });

       

六、删除数据

删除数据也和书中的不一样了,主要就是用LitePal直接进行单个的删除,或者有条件的删除。调用delete()方法和deleteAll()方法。

deleteAll()参数说明:第一个是肯定就是表名,第二个就是where,第三个就是where中的问号的值。

delete()方法就是一个表名,一个id。

delete_data.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                LitePal.deleteAll(Book.class,"price<?","20");
            }
        });

七、查询数据

查询数据也是直接利用LitePal就可以了。调用LitePal的find和findAll()方法。find找到的是一个javabean对象,然后findAll可以通过条件来找,返回的是一个集合。

 query_data.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //第一种 查找一条 传入表的名称 传入要查条目的id
//                Book book = LitePal.find(Book.class,2);
//                Log.d(TAG, "作者姓名"+book.getAuthor());

                //第二种 查找全部
//                List<Book> books = LitePal.findAll(Book.class);
//                for (Book book:books) {
//                    Log.d(TAG, "书名:"+book.getName());
//                }

                //第三种 查找所有符合条件的
                List<Book> books = LitePal.where("name=?","how to fail").find(Book.class);
                for (Book book:books){
                    Log.d(TAG, "书名:"+book.getName());
                }
            }
        });

以上就是一些crud的操作了,非常简单,但是还是需要一些理解


总结

这个新手日记主要就是针对LitePal进行了总结,如何创建库,初始化库,对表内容进行增删查改,其中有很多和书中不一致,需要直接到github上面去直接学习!

 类似资料: