mybatis框架动态SQL

MyBatis框架动态SQL

MyBatis框架之所以优秀,一是因为将sql与代码分离,二就是具有强大的动态sql功能。

主要的动态sql有:

1.if标签的使用。
2.where标签的使用。
3.where标签与choose标签的联合使用。
4.set标签的使用。
5.foreach标签的使用。
6.trim标签的使用。

一,if标签的使用

如下:

 <select id="queryList" parameterType="studentModel" resultMap="BaseResultMap">
        select
        <include refid="Base_Column_List"/>
        from student
        WHERE name=#{name} 
        <if test="age > 0">
            AND age=#{age}
        </if>
    </select>

说明:

1.if的作用是判断是否满足条件,满足条件时if里面的sql片段才生效。
2.此时的意思是:如果age大于0则在where中添加age的判断条件。

二,where标签的使用

如下:

<select id="queryList" parameterType="studentModel" resultMap="BaseResultMap">
        select
        <include refid="Base_Column_List"/>
        from student
        <where>
            <if test="name!=null and name.length()>0">
                AND name=#{name}
            </if>
            <if test="age > 0">
                AND age=#{age}
            </if>
        </where>
    </select>

说明:

1.where常与if连用,当if中有满足的条件时where才会其作用。
2.where标签中的每一个字段前都可以加and,系统会自己将第一个满足条件的字段前and去掉。

三,where标签与choose标签联合的使用

如下:

<select id="queryList" parameterType="studentModel" resultMap="BaseResultMap">
        select
        <include refid="Base_Column_List"/>
        from student
        <where>
            <choose>
                <when test="name!=null and name.length()>0">
                    AND name=#{name}
                </when>
                <when test="age > 0">
                    AND age=#{age}
                </when>
                <otherwise>
 
                </otherwise>
            </choose>
        </where>
    </select>

说明:where标签与choose标签连用比与if标签联用的优点是:当都不满足条件时可以在otherwise标签中设置默认的判断条件。

set标签的使用

如下:

<update id="update" parameterType="studentModel">
        UPDATE student
        <set>
            <if test="name!=null and name.length()>0">
                name= #{name},
            </if>
            <if test="age>0">
                age = #{age},
            </if>
        </set>
        WHERE id = #{id}
    </update>

说明:

1.set标签常用if标签一起使用。
2.每个if中的sql片段都要加逗号,这也是sql语法的要求。

五,foreach标签的使用

如下:

 <select id="getObjectByIds" parameterType="java.util.List" resultType="studentModel">
        select name,age
        from student
        where id in
        <foreach collection="list" index="index" item="item" separator="," open="(" close=")">
            #{item}
        </foreach>
    </select>

说明:

1.collection :collection属性的值有三个分别是list、array、map三种,分别对应的参数类型为:List、数组、map集合,我在上面传的参数为集合,所以值为list.
2.item : 表示在迭代过程中每一个元素的别名
3.index :表示在迭代过程中每次迭代到的位置(下标)
4.open :前缀
5.close :后缀
6.separator :分隔符,表示迭代时每个元素之间以什么分隔.

六,trim标签的使用

如下:

 <update id="testTrim" parameterType="com.mybatis.pojo.User">
        update user
        <trim prefix="set" suffixOverrides=",">
            <if test="cash!=null and cash.length()>0">
                cash= #{cash},
            </if>
            <if test="address!=null and address.length()>0">
                address= #{address},
            </if>
        </trim>
        where id = #{id}
    </update>

说明:此时把set拼接在cash=#{cash}前。并把address=#{address}后面的逗号删除。

目前所知道常用的动态sql标签就是这些。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值