• mybatis 脚本


    1,批量更新

     注意:当 parameterType="java.util.List"  的时候,collection="list" 

    <update id="resultFeedback" parameterType="java.util.List">
        UPDATE tm_esim_social_result 
           SET result_status = 
                 <foreach collection="list" item="item" separator=" " open="(CASE id" close="ELSE result_status END),">
                    WHEN #{item.id,jdbcType=VARCHAR} THEN #{item.resultStatus,jdbcType=VARCHAR}
                 </foreach>
               fail_reason = 
                 <foreach collection="list" item="item" separator=" " open="(CASE id" close="ELSE fail_reason END),">
                    WHEN #{item.id,jdbcType=VARCHAR} THEN #{item.failReason,jdbcType=VARCHAR}
                 </foreach>
               state = 
                 <foreach collection="list" item="item" separator=" " open="(CASE id" close="ELSE state END),">
                    WHEN #{item.id,jdbcType=VARCHAR} THEN #{item.state,jdbcType=VARCHAR}
                 </foreach>
               feedback_time = NOW(),
               update_by = #{item.updateBy,jdbcType=VARCHAR},
               update_date = NOW()
         WHERE id IN 
             <foreach collection="list" item="item" separator="," open="(" close=")">
                #{item.id,jdbcType=VARCHAR}
             </foreach>
    </update>

     当parameterType为一个对象的时候,注意,foreach 的 colletion 属性为这个对象下面的属性

    <update id="feedbackAll" parameterType="com.sf.esim.domain.payable.payDo">             
        UPDATE table01
           SET state = #{state,jdbcType=VARCHAR}                                                        
         WHERE id IN                                                                      
        <foreach collection="transferIdList" index="index" item="item" open="(" separator="," close=")">
              #{item,jdbcType=VARCHAR}                                                                  
        </foreach>                                                                                      
    </update>                                                                                           

     批量增加:

    <insert id="addListPayable" parameterType="com.sf.haha.domain.payable.PayableDo">
        INSERT INTO tm_esim_payable 
        ( 
          tm_esim_payable_id,
          pay_the_city,
          account,
          bussi_type
         )
        VALUES 
        <foreach collection="list" item="item" separator=",">  
         (
           #{item.tmEsimPayableId},
           #{item.payTheCity},
           #{item.account},
           #{item.bussiType}
           )
        </foreach>  
    </insert>

     这个我还没有测试过,懒得测试,因为其实大概知道怎么着就可以的了

    <update id="updatePersonalUnitPayById" parameterType="com.sf.esim.domain.deducted.DeductingDetailDo">
            <foreach collection="list" index="index" item="item">
                update tm_esim_deducting_detail
                <set>
                    personal_pay_edit = #{item.personalPayEdit}
                    ,unit_pay_edit =#{item.unitPayEdit}
                    ,edit_declare = #{item.editDeclare}
                </set>
                where deducting_detail_id = #{item.deductingDetailId};
            </foreach>
        </update>

    如果list的泛型是string,则collection为list

        <select id="getOrgName" parameterType="java.util.List" resultType="java.lang.String">
            SELECT GROUP_CONCAT(ORG_NAME) FROM zthr_etl_hr_org_business WHERE ORG_ID IN
            <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
                    #{item,jdbcType=VARCHAR}     
               </foreach> 
        </select>

     <set>标签,自动去掉最后一个逗号

    DECLARE                                                                                                   
        v_id NUMBER;                                                                                          
    BEGIN                                                                                                     
        SELECT t3.id into v_id FROM (                                                                         
          SELECT t.id FROM pmp_agnt_base_info t WHERE t.card_no = #{cardNo} ORDER BY t.create_time DESC       
        )t3 WHERE ROWNUM = 1;                                                                                 
                                                                                                              
        IF v_id IS NOT NULL THEN                                                                              
              UPDATE pmp_agnt_base_info                                                                         
                  <set>                                                                                         
                      <if test="@Ognl@isNotEmpty(quasiDrivingType)">driving_license = #{quasiDrivingType},</if> 
                      <if test="@Ognl@isNotEmpty(idCard)">driving_license_no = #{idCard},</if>                  
                      <if test="@Ognl@isNotEmpty(vin)">vehicle_no = #{vin},</if>                                
                  </set>                                                                                        
                WHERE id = v_id;                                                                                 
                UPDATE pmp_agnt_sign_info                                                                        
                  <set>                                                                                         
                      <if test="@Ognl@isNotEmpty(quasiDrivingType)">driving_license = #{quasiDrivingType},</if> 
                      <if test="@Ognl@isNotEmpty(idCard)">driving_license_no = #{idCard},</if>                  
                      <if test="@Ognl@isNotEmpty(vin)">vehicle_no = #{vin},</if>                                
                  </set>                                                                                        
                WHERE base_id = v_id;                                                                            
                INSERT INTO pmp_agnt_record_sign (record_card_no,update_time) VALUES (#{cardNo},SYSDATE);        
        END IF;                                                                                                     
    COMMIT;                                                                                                   
    END;

     引用映射文件请参加博客(自己没有实践过):mybatis xml 映射文件 sql include 的用法

    取枚举值的:

    <when 枚举值对象.value = 1>
        ........
    </when>

     集合为set

    <select id="listHostInfo" parameterType="java.util.Set" resultMap="listHostInfoResultMap">
            SELECT t.hostid,t.`status`,t2.ip,t.`name`
            FROM `hosts` t
            INNER JOIN interface t2 ON t.hostid = t2.hostid
            <where>
                t.delete_flag = 0
                AND
                t.hostid IN
                <foreach collection="collection" item="item" separator="," open="(" close=")">
                    #{item}
                </foreach>
            </where>
        </select>

    if test 相等

    <if test="sex=='Y'.toString()">
    <if test = 'sex== "Y"'>

    END

  • 相关阅读:
    [Swift]LeetCode773. 滑动谜题 | Sliding Puzzle
    [Swift]LeetCode771. 宝石与石头 | Jewels and Stones
    [Swift]LeetCode770. 基本计算器 IV | Basic Calculator IV
    [Swift]LeetCode769. 最多能完成排序的块 | Max Chunks To Make Sorted
    [Swift]LeetCode768. 最多能完成排序的块 II | Max Chunks To Make Sorted II
    转 玩转Bash变量
    转 shell脚本学习指南
    转: 两个 Shell 网站: explainshell 和 shellcheck
    转 BAT CMD 批处理文件脚本总结(中文)
    转 windows 下 Oracle 导出表结构
  • 原文地址:https://www.cnblogs.com/ericguoxiaofeng/p/8920844.html
Copyright © 2020-2023  润新知