Mybatis中常用的动态SQL语句

发布时间:2024年01月16日

Mybatis中常用的动态SQL语句

1、if 标签用于动态拼接条件

程序员处理业务时,
总会遇到一些动态的条件此时就需要动态的拼接条件。
而Mybatis为我们考虑了这种情况为此提供了一个 if标签
用于动态的拼接SQL语句

具体用法如下:


<select id="findByUser" resultType="user">
    SELECT id,name,age,sex FROM user WHERE
<!-- if语句 中当条件满足则动态的拼接该SQL语句 如果不满足条件则不拼接该条SQL语句-->
        <if test="id != null">id = #{id} </if>
        <if test="name != null">AND name = #{name} </if>
        <if test="age != null">AND age = #{age} </if>
        <if test="age != null">AND age = #{age} </if>
</select>

2、动态拼接WHERE子句

在动态使用if的过程中,有时我们会遇到一些问题 比如上方的SQL语句如果第一个条件不成立的情况下,
SQL语句就会出现拼接错误。为了解决这种现象,Mysql为我们提供了WHERE 标签,WHERE 标签
可以动态的去除 AND 关键字 从而消除SQL语句出错的情况。

!!!注意: AND 关键字只能写在 条件前面 如果写在后面则无法去除。

具体用法如下:

<select id="findByUser" resultType="user">
    SELECT id,name,age,sex FROM user
    <!--通过使用 WHERE 标签 来动态的清除 AND -->
    <where>
        <if test="id != null">id = #{id} </if>
        <if test="name != null">AND name = #{name} </if>
        <if test="age != null">AND age = #{age} </if>
        <if test="age != null">AND age = #{age} </if>
    </where>
</select>

3、拼接SET子句

在进行数据库的修改操作时,有时我们也需要进行动态的修改数据,但在动态修改时又会遇到一些问题
Mybatis为我们提供了SET 标签用于 去除 动态SQL拼接过程中多余的 ,

具体用法如下:

    <!--修改用户 动态的SQL-->
    <update id="updateSQL" >
        update user
            <set >
               <if test=" name != null"> name=#{name}, </if>
               <if test=" age != null"> age=#{age}, </if>
               <if test=" sex != null"> sex=#{sex}, </if>
            </set>
        WHERE id = #{id}
    </update>

4、 万能拼接标签 trim

但上述两种动态的拼接SQL时,有时又不够灵活,Mybatis为我们考虑到了这一点,Mybatis提供了trim 标签
trim 标签自定义制定规则。

属性:

	1.prefix="" 用于添加前缀 <br>
    2.suffix="" 用于添加后缀 <br>
    3.prefixOverrides="" 用于去除前缀 <br> 
    4.suffixOverrides="" 用于去除后缀 <br>
<select id="findByTrim" resultType="com.atguigu.pojo.User">
    select * from user
    <trim prefix="where" suffix=";" prefixOverrides="and|or" suffixOverrides=",">
        <if test="id !=null">id=#{id}</if>
        <if test="name !=null">and name=#{name}</if>
        <if test="age !=null">and age=#{age}</if>
        <if test="sex !=null">and sex=#{sex},</if>
    </trim>
</select>

分支结构用法(类似于java中的 if–else-if–else)

当进行业务查询时,可能我们需要动态的拼接SQL语句但是又不想所有条件都满足才执行而是想要
然后直接进行查询,如果不满足进行第二次判断。这种情况下首先想到的是通过java进行条件的
筛选然后执行不同的SQL语句。但是这样的话我们需要写3条SQL语句而 Mybatis为了方便我们
的开发为我们提供了一组标签choose when otherwise 用于进行动态的判断和SQL
语句的拼接。 作用类似与java中的 if-elseif-else

<select id="findUser" resultType="user">
    SELECT * FROM user 
    <where>
        <choose>
            <when test="name != null"> name=#{name}</when>
            <when test="age != null"> name=#{age}</when>
            <otherwise test="age != null"> name=#{age}</otherwise>
        </choose>
    </where>
</select>
文章来源:https://blog.csdn.net/caomnnnnnn/article/details/135632203
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。