app开发者平台在数字化时代的重要性与发展趋势解析
820
2023-01-29
解决Mybatis的@Param()注解导致分页失效的问题
@Param注解导致分页失效—分页-
问题描述
在使用mybatis分页时,使用@Param注解传入了两个对象,分页失效,查询出的总是全部的数据。
出现问题时,分页策略为:分页-实现的分页
【错误写法】
service写法:
public Page
entity.setPage(page)http://;
page.setList(dao.getByNidAndEntity(nid,entity));
return page;
}
dao方法声明:
List
mapper.xml中的sql:
select
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}
原因解析
【关键原因】
根源问题在于:在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即可
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~