美文网首页
mybatis笔记- 06

mybatis笔记- 06

作者: 50ef8076d671 | 来源:发表于2017-07-14 22:11 被阅读0次

    2017 06 15

    本次笔记所记录:
    mappe映射文件内的
    · <trim>标签
    · <where>标签
    · <set> 标签
    UPDATE更新操作SET标签
    批量增加和批量删除
    <where>标签的使用
    <!--Element : whereContent Model : (include | trim | where | set | foreach | choose | if  | bind)*-->
    
    <!--    where标签的规则:
        1.发现标签内有内容,会在内容最前面添加 whehe 关键字
        2.当发现标签内有内容的时候会检查内容是否含有 AND空格  或者 OR空格  如果有  就抹掉  -->
    <sql id="sys_user_columns">
        user_id,account,password,user_name
    </sql>
    
    <select id="if02" parameterType="map" resultMap="BaseResultMapper">
        SELECT
            <include refid="sys_user_columns" />
        FROM
            user
        <where>
            <!-- test中写的类中的属性或者Map中的KEY -->
            <if test="user_name !=null && user_name != ''">
                AND user_name like CONCAT('%',#{user_name},'%')
            </if>
            <if test="account != null and account != ''">
                AND account like CONCAT('%',#{account},'%')
            </if>
        </where>
    </select>
    
    <set>标签的使用

    <set>标签用于开发可以减少sql语句中 set关键字的运用错误

    如果传递过来的值只有一个,
    并且在mapper文件中运用<if>标签做了处理 那么极有可能因为一个逗号 "," 导致语句出错

    因此 介绍<set>标签 避免错误发生

    sql语句set关键字 代码示例:

     <update id="update01" parameterType="User">
            UPDATE
                user
            SET
                <if test="account !=null and account !='' ">
                    account = #{account},
                </if>
                <if test="userName !=null and userName !='' ">
                    user_name = #{userName},
                </if>
                <if test="pwd !=null and pwd !='' ">
                    password = #{pwd},
                </if>
            WHERE
            user_Id = #{userId}
        </update>
    

    <set>标签 代码示例:

        <update id="update01" parameterType="User">
        UPDATE
            user
        <set>
            <if test="account !=null and account !='' ">
                account = #{account},
            </if>
            <if test="userName !=null and userName !='' ">
                user_name = #{userName},
            </if>
            <if test="pwd !=null and pwd !='' ">
                password = #{pwd},
            </if>
        </set>
        WHERE
        user_Id = #{userId}
    </update>
    
    <trim>标签的使用
    <trim prefix="" prefixOverrides=""  suffix=""  suffixOverrides="">
    <!-- trim标签属性解释: -->
     <!--prefix前缀-->
      <!--prefixOverrides前缀抹掉-->
      <!--suffix后缀-->
      <!--suffixOverrides后缀抹掉-->
    </trim>
    
    
    <!-- <where>标签可以用<trim>标签来实现 
        检测前缀where 
        当发现包含 AND  或 OR 关键字 即抹掉  (不区分大小写)
        <set>标签也可以用<trim>标签来实现
    -->
    

    <trim> 标签简单示例
    同样也是<trim>标签实现<where>标签简单示例:

    <select id="if03" parameterType="map" resultMap="BaseResultMapper">
        SELECT
            <include refid="sys_user_columns" />
        FROM
            user
        <!-- test中写的类中的属性或者Map中的KEY -->
        <trim prefix="WHERE" prefixOverrides="AND |OR ">
            <if test="user_name !=null && user_name != ''">
                AND user_name like CONCAT('%',#{user_name},'%')
            </if>
            <if test="account != null and account != ''">
                AND account like CONCAT('%',#{account},'%')
            </if>
        </trim>
    </select>
    

    <trim>标签实现<set>标签简单示例:

        <select id="if03" parameterType="map" resultMap="BaseResultMapper">
        SELECT
            <include refid="sys_user_columns" />
        FROM
            user
        <!-- test中写的类中的属性或者Map中的KEY -->
        <trim prefix="WHERE" prefixOverrides="AND |OR ">
            <if test="user_name !=null && user_name != ''">
                AND user_name like CONCAT('%',#{user_name},'%')
            </if>
            <if test="account != null and account != ''">
                AND account like CONCAT('%',#{account},'%')
            </if>
        </trim>
    </select>

    相关文章

      网友评论

          本文标题:mybatis笔记- 06

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