解决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分页失效内容搜索编程之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程之家!

相关文章

HashMap是Java中最常用的集合类框架,也是Java语言中非常典型...
在EffectiveJava中的第 36条中建议 用 EnumSet 替代位字段,...
介绍 注解是JDK1.5版本开始引入的一个特性,用于对代码进行说...
介绍 LinkedList同时实现了List接口和Deque接口,也就是说它...
介绍 TreeSet和TreeMap在Java里有着相同的实现,前者仅仅是对...
HashMap为什么线程不安全 put的不安全 由于多线程对HashMap进...