Mybatis 动态sql语句if标签和where标签结合巧妙使用

发布网友 发布时间:1天前

我来回答

1个回答

热心网友 时间:1天前

在Mybatis中,动态SQL的if标签和where标签可以巧妙地结合,以实现灵活的查询条件。假设我们的需求是根据电话和名字查找用户数据。

初始的SQL查询可能看起来像这样:

SELECT * FROM users WHERE mobile LIKE '%{mobile}' AND gender = #{gender}

在Mapper.xml文件中,配置的动态SQL如下:

<select id="getUserByPhoneName">
SELECT * FROM users
<choose>
<when test="gender != null">
AND gender = #{gender}
</when>
<otherwise>
-- 如果gender未传,则不添加此条件
</otherwise>
</choose>
AND mobile LIKE #{mobile}
</select>

在代码块2-2中,我们对性别条件进行了改进,使用if标签来判断,仅当gender为0或1时执行查询,代码如下:

<if test="gender != null">
AND gender = #{gender}
</if>

如果要查询所有用户信息而不指定gender和username,可以修改代码块2-3,移除if标签:

<!-- 移除if标签 -->
AND mobile LIKE #{mobile}

总结,通过结合if标签,我们可以灵活地根据传入的参数动态调整SQL查询条件。这在处理不同场景下的用户查询时显得尤其有用。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com