mybatis sql like模糊查询
时间: 2023-08-14 18:13:04 浏览: 169
使用 MyBatis 进行模糊查询可以使用 SQL 的 `LIKE` 关键字配合 `%` 和 `_` 进行通配符匹配。以下是一个示例:
```xml
<select id="getUserByName" resultType="User">
SELECT * FROM users WHERE name LIKE '%${name}%'
</select>
```
在这个示例中,`getUserByName` 是查询语句的唯一标识,`User` 是结果的返回类型。`${name}` 是使用 `${}` 语法引用传入的参数值。
在上述示例中,我们使用了 `%` 通配符来匹配任意字符的任意长度,这意味着在 `name` 字段的任意位置都可以包含传入的参数值。如果要进行精确匹配,可以根据需要修改通配符的位置。
请注意,在使用 `${}` 语法来引用参数值时,MyBatis 不会对参数进行预编译,这可能会导致 SQL 注入的安全风险。为了避免这个问题,建议使用 `#{}` 语法来引用参数值,如下所示:
```xml
<select id="getUserByName" resultType="User">
SELECT * FROM users WHERE name LIKE CONCAT('%', #{name}, '%')
</select>
```
在这个示例中,我们使用 `CONCAT` 函数来拼接 `%` 和参数值,并且使用 `#{}` 语法来引用参数值。这样做可以确保参数值会被正确地进行预编译,提高查询的安全性。
相关问题
mybatis interface sql模糊查询
MyBatis 支持模糊查询,可以使用 LIKE 操作符,也可以使用 CONCAT 函数。
例如,在一个 user 表中,我们想要查找所有用户名包含 "Tom" 的用户,可以使用以下语句:
```xml
<select id="findUsersByName" resultType="User">
SELECT * FROM user WHERE name LIKE CONCAT('%', #{name}, '%')
</select>
```
其中,#{name} 是传入的参数,% 表示任意字符。
使用 CONCAT 函数可以更灵活地拼接字符串,也可以使用其他 SQL 函数来实现更复杂的模糊查询。
在 MyBatis 中,可以将 SQL 语句写在 XML 文件中,也可以使用注解方式来定义 SQL。无论哪种方式,都需要在 Mapper 接口中定义方法,方法名和 SQL 语句的 id 对应。例如:
```java
public interface UserMapper {
@Select("SELECT * FROM user WHERE name LIKE CONCAT('%', #{name}, '%')")
List<User> findUsersByName(String name);
}
```
在使用时,可以直接调用该方法即可。例如:
```java
List<User> users = userMapper.findUsersByName("Tom");
```
mybatis动态sql模糊查询
MyBatis提供了动态SQL的功能,可以根据不同的条件组装不同的SQL语句,实现灵活的查询操作。下面是一个使用动态SQL实现模糊查询的示例:
```
<select id="findUserByName" parameterType="String" resultType="User">
SELECT * FROM user
<where>
<if test="name != null and name != ''">
AND name like concat('%', #{name}, '%')
</if>
</where>
</select>
```
这个示例中,使用了`<where>`和`<if>`标签来实现动态SQL。`<where>`标签会在其中包含的条件成立时,自动添加一个WHERE关键字。`<if>`标签根据条件动态生成SQL语句,这里是根据`name`参数是否为空来判断是否需要添加模糊查询条件。
其中`#{name}`是MyBatis的占位符语法,表示接收一个参数,可以直接在SQL语句中使用。这里使用`concat`函数拼接了模糊查询的通配符,实现了模糊查询的功能。
使用这个示例,可以调用如下代码来查询用户:
```
List<User> userList = sqlSession.selectList("findUserByName", "张三");
```
这样就可以根据姓名模糊查询用户了。
阅读全文