当前使用版本(必填,否则不予处理)

3.4.3 3.4.3.4也同样有问题

该问题是如何引起的?(确定最新版也有问题再提!!!)

Page getPageNew(Page page, @Param(Constants.WRAPPER) Wrapper wrapper, @Param("pendingWrapper") Wrapper pendingWrapper, @Param("alreadyWrapper") Wrapper alreadyWrapper); 由于sql比较复杂,要用mysql的union,所以mapper设置多个条件构造器作为入参,如上.构造where条件的时候获取不到参数值

log.debug(pendingWrapper.getCustomSqlSegment()); log打印出来内容如下 WHERE (((FILED1 = #{ew.paramNameValuePairs.MPGENVAL1} AND FILED2 <> #{ew.paramNameValuePairs.MPGENVAL2}) OR (FILED3 = #{ew.paramNameValuePairs.MPGENVAL3} AND ((FILED4 IS NULL OR LENGTH(FILED4) = #{ew.paramNameValuePairs.MPGENVAL4})) AND (FILED5 IN (#{ew.paramNameValuePairs.MPGENVAL5}) OR FILED6 IN (#{ew.paramNameValuePairs.MPGENVAL6})))) AND FILED7 NOT IN (#{ew.paramNameValuePairs.MPGENVAL7})) 看到日志中#{ew.paramNameValuePairs.MPGENVAL1} 应该是取值的时候还是用的默认的ew来取值,所以取不到,希望官方修复一下,可以使用自定义的key来取值

重现步骤(如果有就写完整)

mapper使用多个条件构造器作为入参 如下 @Select("select a. from " + "(select i., 1 AS PENDING, l.CREATE_TIME operate_time " + "from (SELECT * FROM table1 ${pendingWrapper.customSqlSegment}) i " + "left join (select order_id,CREATE_TIME from table2 where id in " + "(select max(id) from table2 group by order_id)) l on i.ID=l.f_id " + "union " + "select i.*, 0 AS PENDING, max(l.CREATE_TIME) operate_time " + "from table1 i " + "left join table2 l on i.id = l.f_id " + "${alreadyWrapper.customSqlSegment}) a " + "${ew.customSqlSegment}") Page getPageNew(Page page, @Param(Constants.WRAPPER) Wrapper wrapper, @Param("pendingWrapper") Wrapper pendingWrapper, @Param("alreadyWrapper") Wrapper alreadyWrapper);

报错信息

获取到的参数全都为null Parameters: null, null, null, null, null, null, null, null MyBatis-Plus 多个条件构造器作为mapper入参时,获取参数为null