用MyBatis+PageHelper打注释时小心点
硬是要在XML文件里要打注释就用XML自带的注释,最好是这种:
<![CDATA[ 注释内容 ]]>
在Mybatis的具体实现里,CDATA内部所有东西都会被SQL解析器忽略。
如果不涉及到特殊符号、嵌套注释的话,就普通的 <!--注释内容-->
也行
刚遇到用双减号(-- 注释内容
)这种注释的代码报错,愣是没看懂到底出了什么问题。
错误内容差不多是这种:
The column index is out of range: 3, number of columns: 2.
我还在那SQL里找了半天,对照好几遍看看到底是什么参数少了。
盯着Git提交记录往前翻,结果发现问题代码于几个版本之前有一个微乎其微的变动,就是单纯的加了一行注释。
最终定位到的问题是,在某个判定之下,该注释会成为一个尾行的注释。
用MyBatis的应该都有接触到,Java里边有个分页插件叫PageHelper,一般都和MyBatis配套使用的,在分页时为了查询总行数,它会在XML中原SQL的外层包一圈,这种情况下若是有一个尾行的、SQL原生的注释,就会把 PageHelper 生成的SQL给一起去掉,于是就会出bug了。
这是一个很愚蠢的bug,但是没遇到过的话,那还真是很难得注意……