xml 动态sql里 用户信息是一个入参,它等于工号或者它模糊查询用户名
时间: 2024-04-01 09:36:05 浏览: 54
如果用户信息是一个入参,可以使用 MyBatis 的 OGNL 表达式来判断工号或用户名是否为空,从而动态拼接 SQL 语句。以下是一个实现用户信息等于工号或者模糊查询用户名的动态 SQL 示例:
```xml
<select id="getUserInfo" parameterType="String" resultType="User">
SELECT * FROM users
WHERE 1 = 1
<if test="user_info != null and user_info != ''">
<choose>
<when test="user_info.matches('\\d+')">
AND user_id = #{user_info}
</when>
<otherwise>
AND user_name LIKE CONCAT('%', #{user_info}, '%')
</otherwise>
</choose>
</if>
</select>
```
其中,`getUserInfo` 是 SQL 映射语句的 ID,`parameterType` 表示传入参数类型,`resultType` 表示返回结果类型。在 SQL 语句中,`1 = 1` 是为了方便后面的条件拼接,不影响查询结果。`<if>` 元素的 `test` 属性指定条件表达式,如果满足条件则拼接该条件的 SQL 语句。`<choose>` 元素用于选择条件分支,如果入参是数字则查询工号,否则查询用户名。`#{user_info}` 是从传入参数中获取的用户信息,可以直接作为参数传入。`CONCAT('%', #{user_info}, '%')` 是拼接模糊匹配的字符串,`#{}` 表示占位符,可以防止 SQL 注入。
这样实现的好处是可以根据入参动态生成 SQL 语句,避免了传入多个参数的麻烦。
阅读全文