当前使用版本(必填,否则不予处理)
3.4.3 3.4.3.4也同样有问题
该问题是如何引起的?(确定最新版也有问题再提!!!)
Page
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
报错信息
获取到的参数全都为null
Parameters: null, null, null, null, null, null, null, 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的情况
其实感觉官方可以实现 不知道是否是因为有其他bug所以不支持这样
只是探讨 还请大神耐心指点