MybatisPlus(2)

简介: MybatisPlus(2)

一、标准分页功能制作🍭

MyBatis-Plus提供了方便易用的标准分页功能,可以轻松实现分页查询。

1、实现分页功能🍉

image.png

在上篇我们简单介绍了 一些MybatisPlus带来的简单方法,现在来看看它所带来的分页功能是如何实现的。

image.png

可以看到这个函数需要一个page参数。


<E extends IPage<T>> E selectPage(E page, @Param("ew") Wrapper<T> queryWrapper);

点进源码发现这是一个IPage(这是一个接口)的对象,我们就给它一个对应的对象。


@Test
    void testGetByPage(){
        IPage page=new Page(1,1);//第一个参数表示第几页,第二个参数表示一页多少条
        userDao.selectPage(page,null);
        System.out.println("当前页码值:"+page.getCurrent());
        System.out.println("每页显示数:"+page.getSize());
        System.out.println("一共多少页:"+page.getPages());
        System.out.println("每页显示数:"+page.getTotal());
        System.out.println("数据:"+page.getRecords());
    }

运行测试代码:

image.png

我们可以发现这其中多少页、多少条并没有准确显示,而且看数据它将所有数据都查出来了,这就是简单的查询所有数据。为什么会这样?因为还没有设置完全,需要给分页功能添加拦截器才可以使用。

2、分页拦截器🍉

实现这个分页功能需要配置MybatisPlus分页拦截器,如果那个类需要使用这个分页功能则需要加入到拦截器中。那我们来实现一下:

package com.example.config;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MpConfig {
    @Bean
    public MybatisPlusInterceptor mpInterceptor(){
        //1.定义Mp拦截器
        MybatisPlusInterceptor mpInterceptor = new MybatisPlusInterceptor();
        //2.添加具体的拦截器
        mpInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        return mpInterceptor;
    }
}

随便配置打印 MyBatis-plus 执行的 SQL


mybatis-plus:
  mapper-locations: classpath:mapper/*Mapper.xml
  configuration: # 配置打印 MyBatis-plus 执行的 SQL
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

然后再次运行代码

image.png

我们可以发现所有数据都正确显示了,查询的数据也只有一条,然后再看SQL语句,我们查询第二页再看一下:

image.png

可以发现查询第一页和第二页的SQL语句不太一样,有两个参数,MybatisPlus这也太智能了吧,这也让我们的分页操作十分简单了。

二、加快控制台运行速率🍭

1、不打印日志🍉

创建一个logback.xml,可以让控制台的日志打印消失。


"1.0" encoding="UTF-8"?>
<configuration>
configuration>

未添加xml前:

image.png

添加后:

image.png

2、不打印Spring图标和MyBatisPlus图标🍉

分别给mybatic-plus和Spring设置banner属性:


# 配置数据库的连接字符串
spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/ku2022?characterEncoding=utf8
    username: root
    password: "123456"
    driver-class-name: com.mysql.cj.jdbc.Driver
  main:
    banner-mode: off #不显示logo
mybatis-plus:
  mapper-locations: classpath:mapper/*Mapper.xml
  configuration: # 配置打印 MyBatis-plus 执行的 SQL
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  global-config:
    banner: false #不显示logo

运行测试代码,发现只有SQL信息和打印信息:

image.png

三、条件查询的三种语句🍭

MyBatisPlus将书写复杂的SOL查询条件进行了封装,使用编程的形式完成查询条件的组合。

image.png

可以看到大部分select语句都有一个相同的Wrapper接口,这些Wrapper接口就是用来封装查询操作的。

1、按条件查询🍉

现在数据库中有三个用户,我们去查询出age小于18的用户。

image.png

测试代码:


@Test
    void textGetAll() {
        //方式一:按条件查询
        QueryWrapper qw=new QueryWrapper<>();//这里的泛型指不指点都可以
        qw.lt("age",18);//lt是表示小于
        List list=userDao.selectList(qw);
        System.out.println(list);
    }

运行:

image.png

2、lambda格式表达式(推荐)🍉

Ⅰ、第一种🍓

我们现在使用lambda表达式的方式去查询age小于20的用户


@Test
    void textGetAll() {
        //方式二:lambda格式按条件查询
        QueryWrapper qw = new QueryWrapper<>();//这里的泛型必须指点,不然下面User::getAge会报错
        qw.lambda().lt(User::getAge, 20);
        List userList = userDao.selectList(qw);
        System.out.println(userList);
    }

运行:

image.png

Ⅱ、 第二种🍓

这是另一种lambda表达式的方式,这也是比较常用的一种方法了。


@Test
    void textGetAll() {
        //方式三:lambda格式按条件查询
        LambdaQueryWrapper lqw = new LambdaQueryWrapper<>();
        lqw.lt(User::getAge, 25);
        List userList = userDao.selectList(lqw);
        System.out.println(userList);
    }

image.png

3、查询大于10小于22的数据🍉

Ⅰ、正常查询🍓


@Test
    void textGetAll() {
        //方式三:lambda格式按条件查询
        LambdaQueryWrapper lqw = new LambdaQueryWrapper<>();
        lqw.gt(User::getAge,10);
        lqw.lt(User::getAge, 22);
        List userList = userDao.selectList(lqw);
        System.out.println(userList);
    }

image.png

Ⅱ、组合查询条件(链式编程格式)🍓

并且 (and)🍒


@Test
    void textGetAll() {
        //方式三:lambda格式按条件查询
        LambdaQueryWrapper lqw = new LambdaQueryWrapper<>();
        lqw.lt(User::getAge,23).ge(User::getAge,10);
        List userList = userDao.selectList(lqw);
        System.out.println(userList);
    }

或者 (or)🍒


@Test
    void textGetAll() {
        //方式三:lambda格式按条件查询
        LambdaQueryWrapper lqw = new LambdaQueryWrapper<>();
        lqw.lt(User::getAge,22).or().ge(User::getAge,10);
        List userList = userDao.selectList(lqw);
        System.out.println(userList);
    }

image.png

四、条件查询null判定🍭

当我们需要判断一个值是否为null时,我们一般使用if语句进行判断,而在MybatisPlus中有更好的方法。

UserQuery类


package com.example.domain;
import lombok.Data;
@Data
public class UserQuery extends User{
    private Integer age2;
}

一般情况使用if:


@Test
    void textGetAll() {
        UserQuery uq=new UserQuery();
        uq.setAge(18);
        uq.setAge2(20);
        LambdaQueryWrapper lqw = new LambdaQueryWrapper<>();
        if (null!=uq.getAge2()){
            lqw.gt(User::getAge,uq.getAge2());
        }
        if (null!=uq.getAge()){
            lqw.lt(User::getAge,uq.getAge());
        }
        List userList = userDao.selectList(lqw);
        System.out.println(userList);
    }

但这样十分麻烦,而MybatisPlus给我们提供了更好的方法。


@Test
    void textGetAll() {
        UserQuery uq=new UserQuery();
        uq.setAge2(20);
        LambdaQueryWrapper lqw = new LambdaQueryWrapper<>();
        //判断是否为null
        lqw.gt(null!=uq.getAge2(),User::getAge,uq.getAge2());
        lqw.lt(null!=uq.getAge(),User::getAge,uq.getAge());
        List userList = userDao.selectList(lqw);
        System.out.println(userList);
    }

运行:

image.png



相关文章
|
7月前
|
SQL 测试技术 数据库
一篇文章带你学会MybatisPlus~(三)
一篇文章带你学会MybatisPlus~
|
7月前
|
Java 数据库连接 mybatis
MybatisPlus(1)
MybatisPlus(1)
92 0
MybatisPlus(1)
|
7月前
|
Java 测试技术 数据库连接
【MyBatisPlus】MyBatisPlus 整合开发
【1月更文挑战第19天】【MyBatisPlus】MyBatisPlus 整合开发
|
SQL Java 数据库连接
Springoot 整合 MyBatisPlus
SpringBoot 整合 MyBatisPlus 的基本步骤,以及MyBatisPlus的基本使用步骤
115 0
|
7月前
|
SQL 监控 数据库
MybatisPlus入门(下)
MybatisPlus入门教程中介绍了如何使用拦截器和性能分析插件。配置拦截器只需添加`PaginationInterceptor`,测试分页查询显示底层使用了`limit`。逻辑删除功能通过`TableLogic`注解和`LogicSqlInjector`实现,性能分析插件`PerformanceInterceptor`用于监控SQL执行时间,超过设定值会抛出异常。条件构造器如`QueryWrapper`提供便捷的查询条件设置,支持多种比较操作。
|
7月前
|
存储 算法 Java
一篇文章带你学会MybatisPlus~(二)
一篇文章带你学会MybatisPlus~
431 0
|
7月前
|
SQL Java 数据库连接
一篇文章带你学会MybatisPlus~(一)
一篇文章带你学会MybatisPlus~
|
7月前
|
Java 数据库连接 数据库
MybatisPlus(3)
MybatisPlus(3)
81 0
MybatisPlus(3)
|
7月前
|
算法 数据库 SQL
MybatisPlus(4)
MybatisPlus(4)
77 0
MybatisPlus(4)
|
7月前
|
SQL Java 数据库
MybatisPlus(5)
MybatisPlus(5)
57 0
MybatisPlus(5)