UserMapper 接口声明:

mapper.xml实现如下:

单元测试如下:

结果如下:

mapper接口声明:

mapper.xml实现:

单元测试代码:

结果:

相关注解:

在进行需要对查询的结果排序(order)时候就需要使用${},如果使用#{}在进行SQL拼接时候会给排序规则(asc,desc)加上 ’ ’ 导致SQL语句报错
mapper接口:

mapper.xml实现:

单元测试:


直接替换才能查询成功,使用#{}反而会报错:

假设实现一个登录功能,此时数据库中只有admin一条用户信息(账号密码均为admin):

mapper接口:

xml实现:(使用直接替换的${}):

在正常输入正确的账号密码时候能够实现登录(查询到完整的用户信息):
单元测试代码:


sql 注⼊代码:“’ or 1='1”

发现即使在用户没有正确输入密码的情况下也能成功查询到完整的用户信息:

这就是SQL注入问题;
结论:用于查询的字段,尽量使用 #{} 预查询的方式。
在进行like模糊查询时 使⽤ #{} 报错:
mapper接口:

xml实现:

单元测试:

报错:

原因如下:相当于: select * from userinfo where username like ‘%‘username’%’; 又加了一次 ’ ’ 所以肯定是查询不出来的:

这个是不能直接使⽤ ${},可以考虑使⽤ mysql 的内置函数 concat() 来处理,实现代码如下:


单元测试:

模糊查询成功~