1.问题描述采用多参数@Param配置,调用如下方法时报type参数异常
int equipmentAuthByListUserIdsCount(@Param(value = "type") String type, @Param(value = "idEquipment") Integer idEquipment);
2.异常信息:分析了一下mybatis源码,主要原因是mybatis TypeHandler匹配异常导致。除此之外一般都是书写问题,或者参数名、jdbcType类型错误等
org.apache.ibatis.type.TypeException: Could not set parameters for mapping: ParameterMapping{property='type', mode=IN, javaType=class java.lang.Object, jdbcType=VARCHAR, numericScale=null, resultMapId='null', jdbcTypeName='null', expression='null'}. Cause: org.apache.ibatis.type.TypeException: Error setting non null for parameter #1 with JdbcType VARCHAR . Try setting a different JdbcType for this parameter or a different configuration property. Cause: java.lang.ClassCastException: java.lang.String cannot be cast to java.sql.Array
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:982)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:866)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:635)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:851)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
3.解决办法:添加类型声明(javaType=string)
<if test="type != null and type != ''">
and equipment.type = #{type,javaType=string,jdbcType=VARCHAR}
</if>