mapper.xml文件中的注释
注释方式
在mapper.xml文件中,注释方式为<!--existence of query content-->
,直接采用Java代码方式的注释/*existence of query content*/
会报错,尤其是在SQL语句中出现这种注释方式时。
‘无效的列索引’bug和解决
昨天在导入数据时需要对数据进行验证,在mapper文件中对表中数据进行查询,将作废sql注释时选择了Java方式,此时会报错。
<select id="getSeqNameCount" parameterClass="java.util.HashMap" resultClass="java.lang.Integer">
SELECT COUNT(*) COUN FROM tablename A
WHERE A.id=#id# and A.name=#name#
/*SELECT * FROM tablename A
WHERE A.id=#id# and A.name=#name#*/
</select>
在解析时由于会将参数位置解析为占位符‘?’,所以此时以下的sql会在后台解析成如下,但是传入的参数只有两个,所以这个时候会报 “Caused by: java.sql.SQLException: 无效的列索引”,因为传入的参数和占位符数量不等。
SELECT COUNT(*) COUN FROM tablename A WHERE A.id=? and A.name=?
/*SELECT * FROM tablename A WHERE A.id=? and A.name=?/
总结
1、mapper.xml文件中注释方式为<!--existence of query content-->
;
2、 “Caused by: java.sql.SQLException: 无效的列索引”错误一般由sql语句中占位符引起:
1传入参数数量不等与占位符的数量;
2SQL语句中的占位符?是中文版;
3SQL语句中的占位符?被放在字符串内;
所有评论(0)