MyBatis中有两种占位符:${}和#{}
${}:字符串替换,会在sql语句执行之前替换成他的值
#{}:等同于sql语句的"?"占位符,以setXxx的方式传值
看栗子:
<select id="queryUser" resultType="User" databaseId="mysql" >
select * from user where user_id between ${s} and #{e}
</select>
为s传值:2,e传值:5,那么底层会执行
var preparedStatement = connection.prepareStatement("select * from user where user_id between 2 and ?");
preparedStatement.setInt(1,5);
preparedStatement.executeUpdate();
所以,提供用户输入的一定不能用${}作为占位符,防止SQL注入。