mybatis模糊查询防止%
时间: 2023-12-06 22:38:13 浏览: 33
为了防止用户输入的通配符影响到模糊查询的结果,可以在传入参数时对其进行处理。在MyBatis中,可以使用`<![CDATA[ ]]>`标签来包含SQL语句,从而避免特殊字符的影响。具体实现如下:
```xml
<!-- 在Mapper.xml文件中定义SQL语句 -->
<select id="selectByKeyword" parameterType="String" resultType="Material">
SELECT * FROM materials WHERE materials_name LIKE CONCAT('%', <![CDATA[#{keyword}]]>, '%')
</select>
```
在Java代码中,需要对传入的参数进行处理,将其中的特殊字符进行转义,例如:
```java
// 对传入的参数进行处理,将其中的特殊字符进行转义
String keyword = "%" + specialSubjectName.replaceAll("([%_])", "\\\\$1") + "%";
List<Material> materials = materialMapper.selectByKeyword(keyword);
```
其中,`replaceAll("([%_])", "\\\\$1")`表示将字符串中的`%`和`_`进行转义,转义后的结果为`\%`和`\_`。
相关问题
mybatis 模糊查询、
在MyBatis中,可以使用两种方式实现模糊查询:使用#和$符号。
1. 使用#符号:
在Mapper.xml文件中,可以使用#符号来实现模糊查询。#符号会将传入的参数当作一个预编译的参数,可以防止SQL注入的问题。示例代码下[^1]:
```xml
<select id="getUserByName" resultType="User">
SELECT * FROM user WHERE name LIKE CONCAT('%', #{name}, '%')
</select>
```
在上述代码中,`#{name}`表示传入的参数,使用`CONCAT('%', #{name}, '%')`来拼接模糊查询的条件。
2. 使用$符号:
在Mapper.xml文件中,可以使用$符号来实现模糊查询。$符号会将传入的参数直接拼接到SQL语句中,存在SQL注入的风险,因此需要谨慎使用。示例代码如下[^2]:
```xml
<select id="getUserByName" resultType="User">
SELECT * FROM user WHERE name LIKE CONCAT('%', '${name}', '%')
</select>
```
在上述代码中,`${name}`表示传入的参数,使用`CONCAT('%', '${name}', '%')`来拼接模糊查询的条件。
需要注意的是,使用$符号时需要注意防止SQL注入的问题,可以通过对传入参数进行合法性校验或者使用预编译参数的方式来避免。
mybatis 模糊查询
MyBatis 中的模糊查询可以使用 SQL 中的 `LIKE` 关键字实现。
例如,假设我们有一个表 `user`,其中有一个名为 `name` 的字段,我们想要模糊查询名字中包含关键字 `Tom` 的用户,可以使用以下 SQL 语句:
```sql
SELECT * FROM user WHERE name LIKE '%Tom%'
```
在 MyBatis 中,我们可以使用 XML 映射文件或注解方式来实现该查询,如下所示:
XML 映射文件:
```xml
<select id="selectUsersByName" resultType="User">
SELECT * FROM user WHERE name LIKE CONCAT('%', #{name}, '%')
</select>
```
注解方式:
```java
@Select("SELECT * FROM user WHERE name LIKE CONCAT('%', #{name}, '%')")
List<User> selectUsersByName(String name);
```
其中,`#{name}` 表示使用 MyBatis 参数占位符的方式来代替 SQL 中的参数,防止 SQL 注入攻击。`CONCAT()` 函数用于将 `%` 和参数拼接起来,构成模糊查询的关键字。