Mybatis @select like 传值问题

Mybatis @select like 传值问题是指在 Mybatis 中使用 @select 注解查询数据时,如果传入的参数中包含 like 关键字,就会出现问题。Mybatis 会将 like 关键字当作一个参数,而不是作为一个查询条件,从而导致查询结果不准确。

Mybatis @select like 传值的解决方案

1、使用 #{} 和 {} 的区别:#{} 会对传入的参数做预处理,而{} 不会,所以如果传入的参数中包含 like 关键字,就应该使用 ${} 而不是 #{}。

2、使用 PreparedStatement 的 setString 方法:在 Mybatis 中,可以使用 PreparedStatement 的 setString 方法来替换掉传入的 like 关键字,从而解决 Mybatis @select like 传值的问题。

3、使用 StringUtils 的 replace 方法:在 Mybatis 中,可以使用 StringUtils 的 replace 方法来替换掉传入的 like 关键字,从而解决 Mybatis @select like 传值的问题。

Mybatis @select like 传值示例代码

12345678910@Select("SELECT * FROM table WHERE name LIKE #{name}")
List<User> getUserByName(String name);

//使用PreparedStatement的setString方法
@Select("SELECT * FROM table WHERE name LIKE ?")
List<User> getUserByName(String name);

//使用StringUtils的replace方法
@Select("SELECT * FROM table WHERE name LIKE ${name}")
List<User> getUserByName(@Param("name") String name);
Java