一、需求:
模糊查询:根据用户姓名进行模糊查询。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
// ...此处省略部分代码
<select id="searchLikeName1" parameterType="java.lang.String" resultType="com.hy.domain.User">
select * from user where username like #{username}
</select>
<select id="searchLikeName2" parameterType="java.lang.String" resultType="com.hy.domain.User">
select * from user where username like '%${username}%'
</select>
</mapper>
测试类代码
@Test
public void searchLikeName1() {
List<User> users = userDao.searchLikeName1("%用户名%");
for (User user : users) {
System.out.println(user);
}
}
@Test
public void searchLikeName2() {
List<User> list = userDao.searchLikeName2("用户名");
for (User user : list) {
System.out.println(user);
}
}
控制台日志
searchLikeName1()
方法
searchLikeName2()
方法
- 从日志可以看出,使用
${}
时,执行的Sql是拼接式的参数。而使用#{}
时,使用的是预编译的方式。 - 使用
#{}
没有SQL注入的问题。而${}
有。 - 使用
${value}
中必须写value。到mybatis3.5版本后,就可以随便写了。 - 使用
#{}
Mybatis会自动进行参数的Java类型和JDBC类型转换。而${}
不会。