美文网首页
MyBatis | 常用标签作用和使用场景示例

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

作者: Ada54 | 来源:发表于2020-10-16 16:30 被阅读0次

    一、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

    相关文章

      网友评论

          本文标题:MyBatis | 常用标签作用和使用场景示例

          本文链接:https://www.haomeiwen.com/subject/vnilpktx.html