mybatis if test 判断多参数种属性值
时间: 2023-08-02 16:22:10 浏览: 269
如果要在 MyBatis 中对多个参数的属性值进行判断,可以使用 `<if>` 标签和 OGNL 表达式。
例如,假设有两个参数 `param1` 和 `param2`,并且它们都有一个属性 `name`,我们想要在 MyBatis 查询中根据它们的 `name` 属性值进行判断,可以这样写:
```xml
<select id="query" resultMap="resultMap">
SELECT * FROM table
WHERE 1 = 1
<if test="param1.name != null and param1.name != ''">
AND name = #{param1.name}
</if>
<if test="param2.name != null and param2.name != ''">
AND name = #{param2.name}
</if>
</select>
```
在上面的示例中,我们使用了两个 `<if>` 标签,分别对 `param1` 和 `param2` 的 `name` 属性值进行了判断。如果属性值不为 null 或空字符串,则会拼接对应的 SQL 语句。
需要注意的是,在 OGNL 表达式中,我们使用了 `!=` 来判断属性值是否为 null 或空字符串。如果使用 `==` 或 `equals()` 判断,则可能会因为 null 引用而抛出异常。
相关问题
mybatis 语句if else
在MyBatis中,我们可以使用`<if>`和`<choose>`标签来实现if-else语句的功能。
1. `<if>`标签
`<if>`标签可以用于在SQL语句中添加条件判断。例如,我们可以使用`<if>`标签来判断一个参数是否为空,如果为空则不添加该条件,否则添加该条件。
示例代码如下:
```xml
<select id="getUserList" resultType="User">
SELECT * FROM user
WHERE 1=1
<if test="username != null">
AND username = #{username}
</if>
<if test="email != null">
AND email = #{email}
</if>
</select>
```
在上面的示例中,我们使用了`<if>`标签来判断`username`和`email`是否为空,如果不为空,则添加相应的条件到SQL语句中。
2. `<choose>`标签
`<choose>`标签可以用于实现if-else语句的功能。它包含多个`<when>`标签和一个`<otherwise>`标签。每个`<when>`标签都有一个`test`属性,用于判断条件是否成立。如果`test`属性的值为true,则执行该`<when>`标签中的SQL语句;否则继续判断下一个`<when>`标签,如果所有的`<when>`标签都不成立,则执行`<otherwise>`标签中的SQL语句。
示例代码如下:
```xml
<select id="getUserList" resultType="User">
SELECT * FROM user
WHERE 1=1
<choose>
<when test="username != null">
AND username = #{username}
</when>
<when test="email != null">
AND email = #{email}
</when>
<otherwise>
AND status = 1
</otherwise>
</choose>
</select>
```
在上面的示例中,我们使用了`<choose>`标签来判断`username`和`email`是否为空,如果不为空,则添加相应的条件到SQL语句中;否则添加`status = 1`条件到SQL语句中。
mybatis foreach 内加 if lese
在Mybatis中,我们可以使用foreach标签来遍历一个集合,并将集合中的元素作为参数传递给SQL语句。如果需要在foreach内加if else语句,可以使用Mybatis提供的choose、when、otherwise标签来实现。
以下是一个示例,假设我们有一个List对象,其中包含了多个User对象,我们需要根据User对象的不同属性值来拼接SQL语句:
```xml
<select idgetUserList" resultType="User">
SELECT * FROM user
WHERE 1=1
<foreach collection="list" item="user" separator="OR">
<choose>
<when test="user.name != null">
AND name = #{user.name}
</when>
<when test="user.age != null">
AND age = #{user.age}
</when>
<otherwise>
AND id = #{user.id}
</otherwise>
</choose>
</foreach>
</select>
```
在上面的示例中,我们使用了choose、when、otherwise标签来实现了在foreach内加if else语句的功能。当遍历到集合中的某个元素时,会根据该元素的属性值来判断使用哪个when标签内的SQL语句,如果所有when标签都不符合条件,则使用otherwise标签内的SQL语句。
阅读全文