在使用 MyBatis 进行模糊查询时,为了防止 SQL 注入攻击,通常会使用预编译的 SQL。预编译的 SQL 可以通过 #{}
占位符来实现。以下是如何在 MyBatis 中使用预编译的 SQL 进行模糊查询的示例:
使用 XML 配置
假设你有一个 UserMapper.xml
文件,其中包含以下内容:
<mapper namespace="com.example.demo.mapper.UserMapper">
<!-- 模糊查询用户 -->
<select id="findUsersByKeyword" parameterType="string" resultType="com.example.demo.entity.User">
SELECT * FROM user WHERE name LIKE CONCAT('%', #{keyword}, '%')
</select>
</mapper>
在这个示例中,#{keyword}
是一个预编译的占位符,用于接收传入的参数。
使用注解配置
如果你更喜欢使用注解,可以在 Mapper 接口中使用 @Select
注解:
@Mapper
public interface UserMapper {
@Select("SELECT * FROM user WHERE name LIKE CONCAT('%', #{keyword}, '%')")
List<User> findUsersByKeyword(String keyword);
}
调用示例
无论你使用 XML 配置还是注解配置,调用方式都是相同的。假设你有一个 UserMapper
接口的实例 userMapper
,你可以这样调用模糊查询方法:
String keyword = "John";
List<User> users = userMapper.findUsersByKeyword(keyword);
注意事项
- 防止 SQL 注入:使用
#{}
占位符可以有效防止 SQL 注入攻击。 - 字符串拼接:在 SQL 中使用
CONCAT
函数来拼接字符串,确保模糊查询的正确性。
通过这种方式,你可以在 MyBatis 中安全地进行模糊查询,并且避免 SQL 注入的风险。