解决Mybatis的@Param()注解导致分页失效的问题

网友投稿 820 2023-01-29

解决Mybatis的@Param()注解导致分页失效的问题

解决Mybatis的@Param()注解导致分页失效的问题

@Param注解导致分页失效—分页-

问题描述

在使用mybatis分页时,使用@Param注解传入了两个对象,分页失效,查询出的总是全部的数据

出现问题时,分页策略为:分页-实现的分页

【错误写法】

service写法:

public Page getByNidAndEntity(Page page,String nid,Entity entity){

entity.setPage(page)http://;

page.setList(dao.getByNidAndEntity(nid,entity));

return page;

}

dao方法声明:

List getByNidAndEntity(@Param("nid") String nid,@Param("entity")Entity entity);

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小时内删除侵权内容。

上一篇:软件开发平台(开发平台)
下一篇:vue小程序(vue小程序面试题)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~