基于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); }
执行结果如下
到此这篇关于基于SpringBoot的SSMP整合案例(开启日志与分页查询条件查询功能实现)的文章就介绍到这了,更多相关SpringBoot整合SSMP内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!