MyBatis | 常用标签作用和使用场景示例

2020-10-16  本文已影响0人  Ada54

一、MyBatis常用标签

常用标签:<if>、<where>、<trim>、<foreach>

1、<if> 标签

作用:where 语句的条件动态拼接

    <!--使用 if 元素根据条件动态查询用户信息-->
    <select id="selectUser" resultType="com.domain.UserInfo" parameterType="com.domain.UserInfo">
        select * from user_info where 1=1
        <if test="uname!=null and uname!=''">
            and uname like concat('%',#{uname},'%')
        </if >
        <if test="usex !=null and usex !=''">
            and usex=#{usex}
        </if >
    </select>

注:
(1) where后面1=1,是为了解决当两个条件都不为true时,sql语句不合法导致报错的问题,也可以通过下面的where标签解决。

2、<where> 标签

作用:输出 where 语句,可以智能的过滤掉条件中多出来的 and 或者or。若条件都不满足,则会查出所有记录。

    <!--使用where元素根据条件动态查询用户信息-->
    <select id="selectUser" resultType="com.domain.UserInfo" parameterType="com.domain.MyInfo">
        select * from user_info 
        <where>
            <if test="uname != null and uname ! = ''">
                and uname like concat('%',#{uname},'%')
            </if>
            <if test="usex != null and usex != '' ">
                and usex=#{usex}
            </if >
        </where>
    </select>

3、<trim> 标签

作用:用于添加 SQL 语句的前缀或者后缀
所以可利用 <trim> 来代替 <where> 的功能

    <!--使用trim元素根据条件动态查询用户信息-->
    <select id="selectUser" resultType="com.domain.UserInfo"parameterType="com.domain.UserInfo">
        select * from user_info
        <trim prefix="where" prefixOverrides = "and | or">
            <if test="uname!=null and uname!=''">
                and uname like concat('%',#{uname},'%')
            </if>
            <if test="usex!=null and usex!=''">
                and usex=#{usex}
            </if>
        </trim>
    </select>

注:
prefix:指定sql语句拼接的前缀
subfix:指定sql语句拼接的后缀
prefixOverrides:指定sql语句前面要去除的关键字或字符,如AND 逗号 括号等
suffixOverrides:指定sql语句后面要去除的关键字或字符

4、<foreach> 标签

作用:用于在 SQL 语句中迭代一个集合,可用在构建 in 条件中

    <!--使用foreach元素查询用户信息-->
    <select id="selectUserByForeach" resultType="com.domain.UserInfo" parameterType=
    "List">
        select * from user_info where uid in
        <foreach item="item" index="index" collection="list"
        open="(" separator="," close=")">
            # {item}
        </foreach>
    </select>

<foreach> 元素的属性包括:
item:表示集合中每一个元素进行迭代时的别名
index:表示标识指定一个名字,用于表示在迭代过程中每次迭代到的位置
open:表示该语句以什么开始
separator:表示在每次进行迭代之间以什么符号作为分隔符
close:表示以什么结束

二、MyBatis标签使用场景示例

1、List 批量插入数据操作

    <!--使用List批量插入多条记录-->
    <insert id="insertByList" parameterType="java.util.List">
        INSERT INTO user_info
       (name,sex,address,status,create_time)
        VALUES
        <foreach collection="userInfoList" item="item" index="index" separator=",">
            (
              #{item.name},
              #{item.sex},
              #{item.address},
              #{item.status},
              #{item.createTime}
            )
        </foreach>
    </insert>

2、使用List批量更新数据操作

Sql释义:根据 id 值的不同,设置对应的状态值和创建时间

    <!--使用List批量更新多条记录-->
    <update id="updateByList" parameterType="java.util.List">
        <if test="userInfoList!=null">
                UPDATE user_info
                <trim prefix="set" suffixOverrides=",">
                    <trim prefix="status = case" suffix="end,">
                        <foreach collection="userInfoList" item="item" index="index">
                            <if test="item.status != null and item.status != ''">
                                WHEN id=#{item.id} THEN #{item.status}
                            </if>
                        </foreach>
                    </trim>
                    <trim prefix="create_time = case" suffix="end,">
                        <foreach collection="userInfoList" item="item" index="index">
                            <if test="item.createTime != null">
                                WHEN id=#{item.id} THEN #{item.createTime}
                            </if>
                        </foreach>
                    </trim>
                </trim>
                <where>
                    id IN
                    <foreach collection="userInfoList" item="item" index="index" separator="," open="(" close=")">
                        <if test="item.id != null and item.id != ''">
                            #{item.id}
                        </if>
                    </foreach>
                </where>
        </if>

    </update>

注:时间类型判断为空时,只使用<if test="item.createTime != null">

参考链接:http://c.biancheng.net/view/4378.html

上一篇下一篇

猜你喜欢

热点阅读