方式一:拼接 %
java
public List<User> getUserByUsername(String username) {
// 手动拼接模糊查询字符串
return userMapper.getUserByUsername('%' + username +'%');
}
xml
<select id="getUserByUsername" paramType="string" resultType="user">
selecct * from user where username like #{username};
</select>
缺点: java代码中需要拼接字符串,稍微麻烦点。
方式二:配置文件中写 %
java
public List<User> getUserByUsername(String username) {
// 手动拼接模糊查询字符串
return userMapper.getUserByUsername(username);
}
xml
<select id="getUserByUsername" paramType="string" resultType="user">
selecct * from user where username like '%${username}%';
</select>
缺点: MyBatis 的 $ 底层使用的是拼接的方式,存在SQL注入的风险。
方式三:concat 函数
java
public List<User> getUserByUsername(String username) {
// 手动拼接模糊查询字符串
return userMapper.getUserByUsername(username);
}
xml
<select id="getUserByUsername" paramType="string" resultType="user">
selecct * from user where username like concat('%', #{username}, '%');
</select>
补充知识点
MyBatis使用#底层会替换为?, 交予PrepareStatement去执行,从而避免了SQL注入的问题。$则标识拼接字符串,将参数不经过特殊处理直接进行拼接会造成SQL注入的问题。
本文详细介绍了在MyBatis中实现模糊查询的四种方法,包括手动拼接%,配置文件中使用$,以及使用concat函数。分别阐述了它们的优缺点,如手动拼接可能带来的不便,$符号可能引发的SQL注入问题,以及concat函数的使用方式。同时,补充了MyBatis中#与$的区别,#能防止SQL注入,而$则可能导致安全隐患。
4945

被折叠的 条评论
为什么被折叠?



