${paramName}
使用这种方式的结果是直接替换。底层是用 Statement 实现的。
优点
使用 ${sort} 可以实现排序查询,而使用 #{sort} 就不能实现排序查询了,因为当使⽤ #{sort} 查询时,如果传递的值为 String 则会加单引号,就会导致 sql 错误。
缺点
SQL 注入问题。' or 1='1 使用这个奇怪的sql语句进行查询操作的话即使密码错了也可以查得到,因为 1=‘1’ 为 true,而且还是 or,那么程序就会认为这是一段合法的 sql 了。
#{paramName}
使用这种方式的是预编译处理,即使用占位符(?)。底层是用 PreparedStatement 实现的。
使用 like 查询的时候需要使用 concat 拼接:
select * from articleinfo title like concat ('%', #{title}, '%')
单元测试结果: