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

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 自定义条件构造器获取参数为null

Comment From: miemieYaho

不支持多个wrapper入参

Comment From: zhangshiyao666

不支持多个wrapper入参

开发团队考虑以后支持多个wrapper入参吗

Comment From: huayanYu

不考虑

Comment From: zhangshiyao666

不考虑

那么多个where的情况有什么解决方案吗

Comment From: zhangshiyao666

我用自己的方式实现了 在这里简单说下思路 参数构造器可以设置参数别名 也就是QueryWrapper的paramAlias属性 可以用QueryWrapper.setParamAlias("")来设置 但是对于复杂的条件构造器不能满足 需要获取到QueryWrapper.getExpression()里面的参数 所以有了使用递归实现的想法

简单贴一下代码实现: 没有考虑lambda的情况 MyBatis-Plus 自定义条件构造器获取参数为null

其实感觉官方可以实现 不知道是否是因为有其他bug所以不支持这样

只是探讨 还请大神耐心指点