微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

这篇文章主要介绍了解决Mybatis的@param()注解导致分页失效的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

@Param注解导致分页失效―分页拦截

问题描述

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

出现问题时,分页策略为:分页拦截器实现的分页

错误写法】

service写法:

public Page getByNidAndEntity(Page page,String nid,Entity entity){ entity.setPage(page); 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即可

到此这篇关于解决Mybatis的@param()注解导致分页失效的问题的文章就介绍到这了,更多相关Mybatis分页失效内容搜索编程之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程之家!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐