学习动态SQL,明明代码没有问题,逻辑也是通的,参数的数量也是正确,运行起来报错:
Parameter index out of range (3 > number of parameters, which is 2).
StudentDao接口的StudentDao.xml内容:
<mapper namespace="com.bjpowernode.dao.StudentDao">
<!-- if
<if test="使用参数java对象的属性值作为判断条件,语法 属性=xxx值">
-->
<select id="selectStudentIf" resultType="com.bjpowernode.domain.Student">
-- 这一整句SQL语句为:select id,name,email,age from student where name=#{name} and age>#{age}
-- 只是对name和age添加了约束条件
select id,name,email,age from student
where
<if test="name!=null and name!=''">
name=#{name}
</if>
<if test="age>0" >
and age>#{age}
</if>
</select>
</mapper>
最后原因就是注释的问题,习惯性的在xml文件中使用ctrl+/ 进行注释,但是当我在select语句中进行注释时,并没有使用标准的注释方式而是:
-- 这一整句SQL语句为:select id,name,email,age from student where name=#{name} and age>#{age}
-- 只是对name和age添加了约束条件
再加上IDEA注释也是绿色的,导致我以为注释了。
解决办法:
将注释更改为正常的注释即可:
<!--
这一整句SQL语句为:select id,name,email,age from student where name=#{name} and age>#{age}
只是对name和age添加了约束条件
-->