中国建设报官方网站,怎么做企业官网,制作网站软件,使用oss图片做网站前言#x1f36d; ❤️❤️❤️SSM专栏更新中#xff0c;各位大佬觉得写得不错#xff0c;支持一下#xff0c;感谢了#xff01;❤️❤️❤️ Spring Spring MVC MyBatis_冷兮雪的博客-CSDN博客 上篇我们简单介绍了MybatisPlus的方便之处#xff0c;这篇来深入了解Myb… 前言 ❤️❤️❤️SSM专栏更新中各位大佬觉得写得不错支持一下感谢了❤️❤️❤️ Spring Spring MVC MyBatis_冷兮雪的博客-CSDN博客 上篇我们简单介绍了MybatisPlus的方便之处这篇来深入了解MybatisPlus的其他功能。
一、标准分页功能制作
MyBatis-Plus提供了方便易用的标准分页功能可以轻松实现分页查询。
1、实现分页功能 在上篇我们简单介绍了 一些MybatisPlus带来的简单方法现在来看看它所带来的分页功能是如何实现的。 可以看到这个函数需要一个page参数。
E extends IPageT E selectPage(E page, Param(ew) WrapperT queryWrapper);
点进源码发现这是一个IPage这是一个接口的对象我们就给它一个对应的对象。
Testvoid testGetByPage(){IPage pagenew 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());} 运行测试代码 我们可以发现这其中多少页、多少条并没有准确显示而且看数据它将所有数据都查出来了这就是简单的查询所有数据。为什么会这样因为还没有设置完全需要给分页功能添加拦截器才可以使用。
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 {Beanpublic 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.xmlconfiguration: # 配置打印 MyBatis-plus 执行的 SQLlog-impl: org.apache.ibatis.logging.stdout.StdOutImpl
然后再次运行代码 我们可以发现所有数据都正确显示了查询的数据也只有一条然后再看SQL语句我们查询第二页再看一下 可以发现查询第一页和第二页的SQL语句不太一样有两个参数MybatisPlus这也太智能了吧这也让我们的分页操作十分简单了。
二、加快控制台运行速率
1、不打印日志
创建一个logback.xml可以让控制台的日志打印消失。
?xml version1.0 encodingUTF-8?
configuration
/configuration
未添加xml前 添加后 2、不打印Spring图标和MyBatisPlus图标
分别给mybatic-plus和Spring设置banner属性
# 配置数据库的连接字符串
spring:datasource:url: jdbc:mysql://127.0.0.1:3306/ku2022?characterEncodingutf8username: rootpassword: 123456driver-class-name: com.mysql.cj.jdbc.Drivermain:banner-mode: off #不显示logo
mybatis-plus:mapper-locations: classpath:mapper/*Mapper.xmlconfiguration: # 配置打印 MyBatis-plus 执行的 SQLlog-impl: org.apache.ibatis.logging.stdout.StdOutImplglobal-config:banner: false #不显示logo 运行测试代码发现只有SQL信息和打印信息
三、条件查询的三种语句
MyBatisPlus将书写复杂的SOL查询条件进行了封装使用编程的形式完成查询条件的组合。 可以看到大部分select语句都有一个相同的Wrapper接口这些Wrapper接口就是用来封装查询操作的。
1、按条件查询
现在数据库中有三个用户我们去查询出age小于18的用户。 测试代码
Testvoid textGetAll() {//方式一按条件查询QueryWrapperUser qwnew QueryWrapper();//这里的泛型指不指点都可以qw.lt(age,18);//lt是表示小于ListUser listuserDao.selectList(qw);System.out.println(list);}
运行 2、lambda格式表达式推荐
Ⅰ、第一种
我们现在使用lambda表达式的方式去查询age小于20的用户
Testvoid textGetAll() {//方式二lambda格式按条件查询QueryWrapperUser qw new QueryWrapper();//这里的泛型必须指点不然下面User::getAge会报错qw.lambda().lt(User::getAge, 20);ListUser userList userDao.selectList(qw);System.out.println(userList);}
运行 Ⅱ、 第二种
这是另一种lambda表达式的方式这也是比较常用的一种方法了。 Testvoid textGetAll() {//方式三lambda格式按条件查询LambdaQueryWrapperUser lqw new LambdaQueryWrapper();lqw.lt(User::getAge, 25);ListUser userList userDao.selectList(lqw);System.out.println(userList);} 3、查询大于10小于22的数据
Ⅰ、正常查询 Testvoid textGetAll() {//方式三lambda格式按条件查询LambdaQueryWrapperUser lqw new LambdaQueryWrapper();lqw.gt(User::getAge,10);lqw.lt(User::getAge, 22);ListUser userList userDao.selectList(lqw);System.out.println(userList);} Ⅱ、组合查询条件链式编程格式
并且 (and) Testvoid textGetAll() {//方式三lambda格式按条件查询LambdaQueryWrapperUser lqw new LambdaQueryWrapper();lqw.lt(User::getAge,23).ge(User::getAge,10);ListUser userList userDao.selectList(lqw);System.out.println(userList);}
或者 (or) Testvoid textGetAll() {//方式三lambda格式按条件查询LambdaQueryWrapperUser lqw new LambdaQueryWrapper();lqw.lt(User::getAge,22).or().ge(User::getAge,10);ListUser userList userDao.selectList(lqw);System.out.println(userList);} 四、条件查询null判定
当我们需要判断一个值是否为null时我们一般使用if语句进行判断而在MybatisPlus中有更好的方法。
UserQuery类
package com.example.domain;import lombok.Data;Data
public class UserQuery extends User{private Integer age2;
}一般情况使用if
Testvoid textGetAll() {UserQuery uqnew UserQuery();uq.setAge(18);uq.setAge2(20);LambdaQueryWrapperUser lqw new LambdaQueryWrapper();if (null!uq.getAge2()){lqw.gt(User::getAge,uq.getAge2());}if (null!uq.getAge()){lqw.lt(User::getAge,uq.getAge());}ListUser userList userDao.selectList(lqw);System.out.println(userList);}
但这样十分麻烦而MybatisPlus给我们提供了更好的方法。
Testvoid textGetAll() {UserQuery uqnew UserQuery();uq.setAge2(20);LambdaQueryWrapperUser lqw new LambdaQueryWrapper();//判断是否为nulllqw.gt(null!uq.getAge2(),User::getAge,uq.getAge2());lqw.lt(null!uq.getAge(),User::getAge,uq.getAge());ListUser userList userDao.selectList(lqw);System.out.println(userList);}
运行