Android中数据库开发之LitePal的基本用法(总结)

LitePal是一款开源的Android数据库框架,采用对象关系映射(ORM)模式,将常用的数据库功能进行封装,可以不用写一行SQL语句就可以完成创建表、增删改查的操作。并且很轻量级,jar包不到100k,几乎零配置。

根据LitePal的数据类型支持,可以进行对象关系映射的数据类型一共有8种,int、short、long、float、double、boolean、String、Date。只要是声明成这8种数据类型的字段都会被自动映射到数据库表中,并不需要进行任何额外的配置。

使用步骤:

1、添加远程依赖:

implementation 'org.litepal.android:core:1.5.1'

2、在app目录下创建assets文件夹,并创建litepal.xml文件。

其中litepal.xml的内容为:(这个文件主要是用来配置数据库以及相关的映射模型)

<?xml version="1.0" encoding="utf-8"?>
<litepal>
    <!--数据库名-->
    <dbname value="BookStore"></dbname>
    <!--数据库版本号,如果修改model类了,可以修改版本号,这样,之前数据库中的数据也能得到保存-->
    <version value="1"></version>
    <!--映射模型,注意一定要使用完整的类名-->
    <list>

        <mapping class="com.deepreality.litepaltestdemo.Book"></mapping>

    </list>
</litepal>

注意两点:

第一:每次只要数据库发生变动, 版本号version都必须加1,这样的话,之前的数据也能得到保存;
第二:表的写法是全类名+表名(Book),如果是多张表,就在list标签中写多个mapping标签就ok。

3、需要在清单文件AndroidManifest.xml里添加配置:

android:name="org.litepal.LitePalApplication"

如下:

4、各个类必须继承DataSupport类才能进行CRUD操作,比如:

/**
 * 必须继承 DataSupport 类,才能进行 CRUD 操作
 */
public class Book extends DataSupport {

    private int id;
    private String author;
    private double price;
    private int pages;
    private String name;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    public int getPages() {
        return pages;
    }

    public void setPages(int pages) {
        this.pages = pages;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

配置至此就OK了。下面开始进行增、删、改、查操作。

1、增加操作

Book book = new Book();
book.setAuthor("某某人");
book.setName("第一行代码");
book.setPages(210);
//添加该条数据
book.save();

注意:save()是添加一条数据,批量添加是 DataSupport.saveAll(books);

2、删除操作

2.1、清空Book表所有数据:

//清空数据
DataSupport.deleteAll(Book.class);

2.2、删除某一条数据

//删除某一条数据
DataSupport.deleteAll(Book.class, "author = ? and pages < ?", "某某人", "200");

3、修改操作

//修改一条数据
//把author=某某人,并且pages=200的数据的price改为25
Book book = new Book();
book.setPrice(25);
book.updateAll("author = ? and pages < ?", "某某人", "200");
//如果知道id的话,可以用下面的(比如,id是1)
//book.update(1);

注意事项:如果更新price为0,直接book.setPrice(0)是无效的。因为在Java中Int的默认值是0,所以LitePal将不会对此进行更新。可以使用book.setToDefault("price")即可,传入相应的字段名。

4、查询操作

//查询操作

//查询一条数据,知道id
//Book book = DataSupport.find(Book.class, 1);
//查询第一条数据
//Book book = DataSupport.findFirst(Book.class);
//查询最后一条数据
//Book book = DataSupport.findLast(Book.class);

//查询数据集合
//知道id的情况下
/*long[] ids = new long[] { 1, 3, 5, 7 };
List<Book> bookList = DataSupport.findAll(Book.class, ids);*/

//不知道id的情况下
//聚合查询
//select:选择哪几列显示;limit:选择前几个数据;offset:偏移量,用于翻页时数据获取。
List<Book> bookList = DataSupport.select("name", "author")
        .where("pages > ?", "100")
        .order("price desc").limit(10).offset(10)
        .find(Book.class);

模糊搜索:

userList = DataSupport.select("id", "name", "sex", "age", "school")
        .where("name like ?", "%" + name + "%")
        .find(Tb_User.class);

至此,LitePal的增、删、改、查基本用法介绍完毕。

使用LitePal的聚合函数

LitePal中一共提供了count()、sum()、average()、max()和min()这五种聚合函数,基本上已经将SQL语句当中最常用的几种聚合函数都覆盖了,那么下面我们就来对这五种聚合函数的用法一一进行学习。

count()

count()方法主要是用于统计行数的,刚才演示了如何通过SQL语句来统计news表中一共有多少行,那么下面我们来看一下如何通过LitePal来实现同样的功能,代码如下所示:

int result = DataSupport.count(News.class);
你没有看错!就是这样一行代码就可以了。调用DataSupport类当中的count()方法,count()方法接收一个Class参数,用于指定去统计哪张表当中的数据,然后返回值是一个整型数据,也就是统计出的结果了。

除此之外,LitePal中所有的聚合函数都是支持连缀的,也就是说我们可以在统计的时候加入条件语句。比如说想要统计一共有多少条新闻是零评论的,就可以这样写:

int result = DataSupport.where("commentcount = ?", "0").count(News.class);
这个用法和我们在上一篇文章当中学到的连缀查询是比较像的,在DataSupport类中首先指定一个where语句用于条件约束,然后连缀一个count()方法,这样统计出的就是满足条件语句的结果了。连缀不仅适用于count()方法,也同样适用于下面我们将要介绍的所有方法,但由于用法都是相同的,后面就不再重复介绍了。

sum()


看完了count()方法应该是觉得非常简单吧,剩下的几个聚合函数也是同样简单的,我们继续来学习一下。

sum()方法主要是用于对结果进行求合的,比如说我们想要统计news表中评论的总数量,就可以这样写:

int result = DataSupport.sum(News.class, "commentcount", int.class);
sum()方法的参数要稍微多一点,我们来一一看下。第一个参数很简单,还是传入的Class,用于指定去统计哪张表当中的数据。第二个参数是列名,表示我们希望对哪一个列中的数据进行求合。第三个参数用于指定结果的类型,这里我们指定成int型,因此返回结果也是int型。

需要注意的是,sum()方法只能对具有运算能力的列进行求合,比如说整型列或者浮点型列,如果你传入一个字符串类型的列去求合,肯定是得不到任何结果的,这时只会返回一个0作为结果。

average()


average()方法主要是用于统计平均数的,比如说我们想要统计news表中平均每条新闻有多少评论,就可以这样写:

double result = DataSupport.average(News.class, "commentcount");
其中average()方法接收两个参数,第一个参数不用说,仍然是Class。第二个参数用于指定列名的,表示我们想要统计哪一列的平均数。需要注意的是,这里返回值的类型是double型,因为平均数基本上都是会带有小数的,用double类型可以最大程序保留小数位的精度。

同样地,average()方法也只能对具有运算能力的列进行求平均值,如果你传入了一个字符串类型的列,也是无法得到任何结果的,这时同样只会返回一个0作为结果。

max()


max()方法主要用于求出某个列中最大的数值,比如我们想要知道news表中所有新闻里面最高的评论数是多少,就可以这样写:

int result = DataSupport.max(News.class, "commentcount", int.class);
可以看到,max()方法接收三个参数,第一个参数同样还是Class,用于指定去统计哪张表当中的数据。第二个参数是列名,表示我们希望统计哪个列中的最大值。第三个参数用于指定结果的类型,根据实际情况来选择传入哪种类型就行了。

那么不用多说,max()方法也只能对具有运算能力的列进行求最大值的,希望你在使用的时候能够谨记这一点。

min()


min()方法主要用于求出某个列中最小的数值,比如我们想要知道news表中所有新闻里面最少的评论数是多少,就可以这样写:

int result = DataSupport.min(News.class, "commentcount", int.class);
min()方法和max()方法的用法基本上是一模一样的,参数也是完全相同,只是方法名变了一下。它们一个是求出某一列中的最大值,一个是求出某一列中的最小值,仅此而已。

 

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值