解决Mybatis的@Param()注解导致分页失效的问题
作者:小妖云汐 发布时间:2022-05-01 13:24:53
标签:Mybatis,@Param(),注解,分页
@Param注解导致分页失效—分页 *
问题描述
在使用mybatis分页时,使用@Param注解传入了两个对象,分页失效,查询出的总是全部的数据。
出现问题时,分页策略为:分页 * 实现的分页
【错误写法】
service写法:
public Page<Entity> getByNidAndEntity(Page<Entity> page,String nid,Entity entity){
entity.setPage(page);
page.setList(dao.getByNidAndEntity(nid,entity));
return page;
}
dao方法声明:
List<Entity> getByNidAndEntity(@Param("nid") String nid,@Param("entity")Entity entity);
mapper.xml中的sql:
<select id="getByNidAndEntity" resultType="Entity">
select <include refid="entityColumns" />
from entity_table et left join other_table ot on et.id = ot.eid
where ot.nid = #{nid}
and et.name = #{entity.name} and et.remarks = #{entity.remarks}
</select>
原因解析
【关键原因】
根源问题在于:在PaginationInterceptor中,分页对象Page被解析为null,导致的分页失效
由于@Param会将参数封装到ParamMap中,而page对象在实体类entity中,导致convertParameter方法返回的page对象为null
【mybatis原码:@Param将参数封装到ParamMap】
跟踪源码进入:org.apache.ibatis.binding.MapperMethod.class
进入executeForMany方法:
进入convertArgsToSqlCommandParam方法,可以看到参数封装到ParamMap中:
解决办法
不使用@Param注解:在传递多个参数(或是多个javaBean)时,可以使用一个包含page属性的实体类进行封装
使用@Param注解:根据需求修改
BaseInterceptor
类中的convertParameter
方法,使得解析page
对象不为null即可
来源:https://blog.csdn.net/qq_42002006/article/details/114368309


猜你喜欢
- 我们先来看完整的代码:import java.io.File;public class JudgeFile {public static v
- 本文测试使用的springcloud版本为:Dalston.SR1很多朋友只知道springcloudconfig可以刷新远程git的配置到
- 概述:Spring Boot 2.0相对于之前的版本,变化还是很大的。首先对jdk的版本要求已经不能低于1.8,其次依赖的spring的版本
- 今天在研究dubbo时,发现一个新的知识点,可以使用javassist包进行动态编程,hibernate也使用该包进行编程。晚上百度了很多资
- 概述泛型机制在项目中一直都在使用,比如在集合中ArrayList<String, String>, Map<String,
- 目录字符串、时间、金额转换日期1日期2有限状态自动机-敏感词搜索加解密文件雪花算法-ID生成网络相关URL相关大家在系统研发过程中,总是会遇
- java的jar是一个打包工具,用于将我们编译后的class文件打包起来,这里面主要是举一个例子用来说明这个工具的使用。在C盘下的temp文
- 单线程是安全的,因为线程只有一个,不存在多个线程抢夺同一个资源代码例子:public class SingleThread {int num
- ShardingSphere的路由引擎类型本篇文章源码基于4.0.1版本上篇文章我们了解到了ShardingSphere在路由流程过程中,根
- groovy是一种动态脚本语言,适用于一些可变、和规则配置性的需求,目前Spring提供ScriptSource接口,支持两种类型,一种是R
- Java数组的定义和使用如果希望保存一组有相同类型的数据,可以使用数组。数组的定义和内存分配Java 中定义数组的语法有两种:
- 该篇文章内容较多,包括有rabbitMq相关的一些简单理论介绍,provider消息推送实例,consumer消息消费实例,Direct、T
- 1 前言在 Springboot 中,异步任务和定时任务是经常遇到的处理问题方式,为了能够用好这两项配置,不干扰正常的业务,需要对其进行异步
- 要点1:cmd命令行的输入命令netsh wlan set hostednetwork mode=allow ssid=用户名
- 本文是引用开源图表库框架 MPAndroidChart的LineChart地址:https://github.com/PhilJay/MPA
- 需求背景需求一:SpringMVC构建的微服务系统,数据库对日期的存储是Long类型的时间戳,前端之前是默认使用Long类型时间,现在前端框
- 前言为什么要动态设置字体大小?由于项目面对的是中老年客户项目中自带的字体无法满足客户需求。Android应用字体大小默认随系统设置的字体大小
- 修改JSP,刷新一下JSP结果就报错,错误如下:严重: Servlet.service() for servlet jsp threw ex
- 本文实例为大家分享了C#实现文字转语音的具体代码,供大家参考,具体内容如下客户提出要求,将文字内容转为语音,因为内网环境,没办法采用联网,在
- springmvc控制登录用户session失效后跳转登录页面,废话不多少了,具体如下:第一步,配置 web.xml <session