确认
当前程序版本
3.5.10.1
问题描述
标签前后的静态sql的换行符没了,
select 1 from table s
where s.field1 > 0 --注释
<if test="id == 3">
and s.field2 = #{id}
</if>
and #{field3} > 0
条件A不满足时,最后的sql合并成了两行
select 1 from table s
where s.field1 > 0 --注释 and #{field3} > 0
后面的and #{field3} > 0
也被当成了注释,但是生成的预编译绑定参数又会多一个#{filed3},导致绑定参数时就因为索引溢出报错了
详细堆栈日志
Comment From: miemieYaho
https://github.com/mybatis/mybatis-3/pull/3349 和这个有关吧,建议你换个方式写注释比如原生xml支持的注释格式
Comment From: IMMOLK
mybatis/mybatis-3#3349 和这个有关吧,建议你换个方式写注释比如原生xml支持的注释格式
我看了下代码和提交记录,解析xml去除换行符是mybatis-plus实现的,https://github.com/baomidou/mybatis-plus/issues/6187,这个去除换行符的功能是否可以根据配置决定呢
Comment From: miemieYaho
那你debug看CCJSqlParserUtil.sanitizeSingleSql
用了吗?
Comment From: IMMOLK
那你debug看
CCJSqlParserUtil.sanitizeSingleSql
用了吗?
执行mapper的查询方法,没有看到调用这个,这个方法会在什么情况下调用吗
Comment From: miemieYaho
没地方调用
Comment From: nieqiurong
暂时回滚原先的换行处理,但注意这种写法搭配mybatis原生的去除换行符也会有问题.
mybatis-plus:
configuration:
shrink-whitespaces-in-sql: true