基于SpringBoot的SSMP整合案例(开启日志与分页查询条件查询功能实现)

开启事务

导入Mybatis-Plus框架后,我们可以使用Mybatis-Plus自带的事务,只需要在配置文件中配置即可
使用配置方式开启日志,设置日志输出方式为标准输出
mybatis-plus:
  global-config:
    db-config:
      table-prefix: tb_
      id-type: auto
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
只有最后一行有用

数据层开发-分页功能

分页操作需要设定分页对象IPage,Page第一个参数当前页码值,第二个是每一页中条数
@Test
    void testPage(){
        IPage page = new Page(2,2);
        bookDao.selectPage(page,null);
        System.out.println(page.getRecords());
    }
IPage对象中封装了分页操作中的所有数据
	 数据
	 当前页码值
	 每页数据总量
	 最大页码值
	 数据总量

这样就直接实现分页了吗?
答案是否定的

分页操作是在MyBatisPlus的常规操作基础上增强得到,内部是动态的拼写SQL语句,
因此需要增强对应的功能,使用MyBatisPlus拦截器实现
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 MyConfig {

    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor(){
        MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
        mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        return mybatisPlusInterceptor;
    }
}
执行测试代码
@Test
    void testPage(){
        IPage page = new Page(1,2);
        bookDao.selectPage(page,null);
        System.out.println(page.getRecords());
    }

在这里插入图片描述
可以看出执行了两次查询,第一次执行的查询获取了总条数,为下面的分页做准备

数据层开发-条件查询功能

上面的分页查询中 bookDao.selectPage(page,null);
第二个参数赋成null,你可能好奇它的功能是什么,那里是用来放条件对象QueryWrapper的。

QueryWrapper解析
QueryWrapper 是 MyBatis-Plus 的一个核心功能,它是用来构造 SQL 查询语句的。MyBatis-Plus 是一款 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
QueryWrapper 主要提供了以下几个功能:
链式调用: QueryWrapper 支持链式调用,使得代码更加简洁易读。
条件构造器: QueryWrapper 提供了丰富的条件构造方法,如 eq (等于)、ne (不等于)、gt (大于)、ge (大于等于)、lt (小于)、le (小于等于) 等。
SQL函数支持: QueryWrapper 支持 SQL 函数,比如 count、sum、avg 等。
子查询支持: QueryWrapper 支持子查询,可以在查询条件中嵌套子查询。
排序支持: QueryWrapper 支持 orderBy 方法进行排序。

下面是一个事例
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", "张三")
            .ne("age", 20)
            .like("email", "test")
            .orderByAsc("age");

等价于SQL语句
SELECT * FROM user WHERE name = '张三' AND age != 20 AND email LIKE '%test%' ORDER BY age ASC;
了解完基础知识点,下面是实际使用
@Test
    void testGetBy(){
        QueryWrapper<Book> queryWrapper = new QueryWrapper<>();
        queryWrapper.like("name","Spring");
        List list = bookDao.selectList(queryWrapper);
    }
执行结果

在这里插入图片描述

缺点:有的时候我们可能会打错,比如将name打成了nmae,有没有什么可以解决呢?有LambdaQueryWrapper。

LambdaQueryWrapper 是 MyBatis-Plus 提供的一个查询条件构造器,它是 QueryWrapper 的一个变种,主要使用 Java 8 的 Lambda 表达式语法。
LambdaQueryWrapper 提供了与 QueryWrapper 类似的功能,包括链式调用、条件构造器、SQL函数支持、子查询支持、排序支持等。
相比于 QueryWrapper,LambdaQueryWrapper 的主要优点在于:
类型安全:LambdaQueryWrapper 使用了 Java 8 的 Lambda 表达式,使得其具有类型安全的特性。你可以在编译时检查到类型错误,而 QueryWrapper 在编译时无法检查到类型错误,只能在运行时通过抛出异常来发现错误。
代码可读性更强:由于使用了 Lambda 表达式,LambdaQueryWrapper 的代码可读性更强。你可以直接看到正在操作的是哪个字段,而不需要通过字符串来指定字段名,这样也避免了因为字段名拼写错误导致的问题。

例如,我们可以使用 LambdaQueryWrapper 构造如下的查询语句:
LambdaQueryWrapper<User> lambdaQuery = new QueryWrapper<User>().lambda();
lambdaQuery.eq(User::getName, "张三")
           .ne(User::getAge, 20)
           .like(User::getEmail, "test")
           .orderByAsc(User::getAge);

等价于SQL语句
SELECT * FROM user WHERE name = '张三' AND age != 20 AND email LIKE '%test%' ORDER BY age ASC;
User::getName 表示字段名是 "name",其他的类推,这样我们就不会因为因为不小心而出错了。
实战如下
@Test
    void testGetBy2(){
        LambdaQueryWrapper<Book> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.like(Book::getName,"Spring");
        List list = bookDao.selectList(queryWrapper);
    }
执行结果如下

在这里插入图片描述

仅学习记录,如有错误欢迎指正~
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只呆小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值