mybaitis-plus mysql like concat 下划线_,值里有下划线,如何全匹配
时间: 2023-09-02 10:02:06 浏览: 60
在MyBatis-Plus中,如果要在MySQL中使用like和concat函数进行模糊查询,并且查询的值中包含下划线,可以通过转义下划线来实现全匹配。
在MySQL中,通配符"_"表示匹配任意单个字符,而不仅仅限于下划线。因此,如果要全匹配包含下划线的值,可以使用转义字符"\_"来表示下划线的字面意义,而不是通配符。
在MyBatis-Plus中,可以使用转义函数来实现对下划线的转义。例如,假设要查询包含下划线的name字段:
```java
String name = "abc_123";
QueryWrapper<Entity> queryWrapper = new QueryWrapper<>();
queryWrapper.like("name", "%" + StringUtils.replace(name, "_", "\\_") + "%");
List<Entity> entityList = entityMapper.selectList(queryWrapper);
```
上述代码中,我们使用了StringUtils.replace()函数将查询值中的下划线替换成"\_",然后使用like函数进行模糊查询。这样能确保查询结果中name字段的值完全匹配包含下划线的值。
需要注意的是,MySQL中的转义字符是"\\",而Java中的转义字符也是"\\",所以我们在将下划线替换为"\_"时,需要使用两个反斜杠来表示一个反斜杠。这样才能正确的将"_"转义为"\_"进行全匹配查询。
相关问题
mybatais-plus 下划线的参数值 多了一个斜杠
您好,感谢您的提问。关于 MyBatis-Plus 下划线的参数值多了一个斜杠的问题,可能是由于转义字符的原因造成的。在某些情况下,如果参数值中包含了特殊字符,比如说斜杠、引号等,需要使用转义字符进行转义,否则会导致语法错误或者SQL注入等问题。在 MyBatis-Plus 中,如果使用了下划线作为占位符,可能会出现参数值中包含斜杠的情况,此时需要使用双斜杠进行转义,例如:
```
@Select("SELECT * FROM user WHERE name LIKE CONCAT('%', #{name}, '%') ESCAPE '/'")
List<User> findByName(@Param("name") String name);
```
在上面的示例中,使用了 ESCAPE '/' 来指定斜杠作为转义字符,然后在参数值中如果包含斜杠,则需要使用双斜杠进行转义,例如:
```
List<User> userList = userMapper.findByName("test\\/user");
```
其中,参数值为 "test\\/user",使用双斜杠进行转义后变成了 "test\/user",最终查询的 SQL 语句为:
```
SELECT * FROM user WHERE name LIKE '%test\\/user%' ESCAPE '/'
```
希望能够解决您的疑问,如有不清楚的地方,请随时追问。
mysql like concat
MySQL的LIKE运算符可以用于模糊匹配字符串。如果要匹配多个条件,可以使用CONCAT函数将它们连接起来。
例如,如果要查找所有姓“张”或者名字中包含“三”的人,可以使用以下查询语句:
```
SELECT * FROM users WHERE last_name LIKE '张%' OR CONCAT(first_name, last_name) LIKE '%三%';
```
其中,`%`表示匹配任意多个字符。`LIKE '张%'`表示姓以“张”开头的人,`CONCAT(first_name, last_name) LIKE '%三%'`表示名字中包含“三”的人。使用`OR`逻辑运算符将它们连接起来,即可实现多条件匹配。