MybatisPlus自定义sql使用分页查询,同时使用条件构造器
2021/6/21 19:27:59
本文主要是介绍MybatisPlus自定义sql使用分页查询,同时使用条件构造器,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
MybatisPlus为我们提供了强大的单表增删改查的方法,并且加入了分页插件,自动化实现了物理分页,十分好用. 但在实际中, 单表的增删改查明显是不够的, 如果加入了多表操作, 也想使用提供的条件构造器以及分页插件如何做到呢?
1.mapper接口
public interface ServeMapper extends BaseMapper<Serve> { IPage<Serve> getServes( IPage<Serve> page, @Param(Constants.WRAPPER) Wrapper<Serve> queryWrapper ); }
1).返回参数设置为IPage<Object>
其中Object是自己定义的实体类或者对应的vo类, mybatis-plus会根据查询列的参数名和vo类进行自动绑定赋值;
IPage表名返回类型为mybatisplus的分页插件的类,其中有records(记录), current(当前页), limit(每页多少条记录)等分页信息
2).参数传递分页对象IPage, 和条件构造器Wrapper
需要注意的是, 分页参数要放在条件构造器参数前面, 否则会出莫名其妙的错误. @Param(Constant.WRAPPER) 注解是必须的
Wrapper中的泛型是否需要, 这个我暂时还不清楚, 希望有大佬解释.
2.xml文件编写sql
<select id="getServes" resultType="com.kjfw.shannxi.entity.Serve"> select s.id , s.name , s.content, s.score , i.name from serve s left join institution i on s.institutionId = i.id ${ew.customSqlSegment} </select>
1). id要和接口对应
2). 要在最后加上${ew.customSqlSegment}
3). 使用了分页插件 , 那就不要加limit语句
4). 给表起别名, 可以在条件构造器中对另一个表进行条件限制
3.测试
@Test public void testPage(){ QueryWrapper<Serve> serveQueryWrapper = new QueryWrapper<>(); serveQueryWrapper.like("s.name" , "检测"); serveQueryWrapper.ge("s.score",4); serveQueryWrapper.eq("i.id","2"); Page<Serve> servePage = new Page<>(1,5); IPage<Serve> serves = serveMapper.getServes( servePage , serveQueryWrapper); // 获取总数 serves.getTotal(); // 获取页数 serves.getPages(); // 获取分页的记录 List<Serve> records = serves.getRecords(); System.out.println(records); }
1). new一个条件构造器
2). 为条件构造器添加条件, (可以添加其他表的条件)
3). new一个分页对象, 泛型为分页的记录对象
4). 设置分页对象的参数(当前页, 分页大小)
5). 执行mapper方法, 分别传入分页对象和条件构造器(再次强调, 分页对象要在条件构造器对象之前)
4.结果分析
==> Preparing: SELECT COUNT(1) FROM serve s LEFT JOIN institution i ON s.institutionId = i.id WHERE (s.name LIKE ? AND s.score >= ? AND i.id = ?) ==> Parameters: %检测%(String), 4(Integer), 2(String) <== Columns: COUNT(1) <== Row: 1 ==> Preparing: select s.id , s.name , s.content, s.score , i.name from serve s left join institution i on s.institutionId = i.id WHERE (s.name LIKE ? AND s.score >= ? AND i.id = ?) LIMIT ?,? ==> Parameters: %检测%(String), 4(Integer), 2(String), 0(Long), 5(Long) <== Columns: id, name, content, score, name <== Row: 4238048, 超高温发动机材料检测, <<BLOB>>, 5, 陕西省交通新能源开发、应用与汽车节能重点实验室 <== Total: 1
1). 第一个Preparing是分页条件查询符合条件的总记录数的查询语句
可以看到, wrapper条件构造器, eq(), ge()等方法解释为了具体的sql语句, 拼接在了sql语句最后
2). 第一个Preparing是将符合条件的具体记录查询出来, 并将分页的条件放在最后, 实现分页
3). 最终mybatisplus会将返回的结果绑定在Page对象的泛型中, 放在records中返回.
这篇关于MybatisPlus自定义sql使用分页查询,同时使用条件构造器的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-27消息中间件底层原理资料详解
- 2024-11-27RocketMQ底层原理资料详解:新手入门教程
- 2024-11-27MQ底层原理资料详解:新手入门教程
- 2024-11-27MQ项目开发资料入门教程
- 2024-11-27RocketMQ源码资料详解:新手入门教程
- 2024-11-27本地多文件上传简易教程
- 2024-11-26消息中间件源码剖析教程
- 2024-11-26JAVA语音识别项目资料的收集与应用
- 2024-11-26Java语音识别项目资料:入门级教程与实战指南
- 2024-11-26SpringAI:Java 开发的智能新利器