淘先锋技术网

首页 1 2 3 4 5 6 7

记录工作中的小经验,针对工作中项目业务需要做批量新增和修改信息;
项目采用的Oracle数据库,表中有序列的情况:
xml配置sql:

  <!-- 批量新增(临时表) -->
  <insert id="insertFlowHisBatch" parameterType="java.util.List" >

    INSERT INTO T_FLOW_HIS(FLOW_CODE, FLOW_YEAR, FLOW_MONTH, TERMINAL_CODE, TERMINAL_NAME)
    SELECT FLOW_SEQ.NEXTVAL,A.* FROM (
    <foreach collection="list" item="item" index="index" separator="union all">
        SELECT 
        #{item.flowYear,jdbcType=DECIMAL},#{item.flowMonth,jdbcType=DECIMAL},
        #{item.terminalCode,jdbcType=VARCHAR},
        #{item.terminalName,jdbcType=VARCHAR} FROM DUAL
    </foreach>
    ) A
  </insert>
  <!-- 批量update状态  错误信息-->
  <update id="updateFlowHisBatchStatus" parameterType="java.util.List">
    BEGIN
        <foreach collection="list" index="index" item="item" separator=";">
            UPDATE T_FLOW_HIS SET
            FLOW_STATUS =#{item.flowStatus,jdbcType=VARCHAR},
            WHERE FLOW_CODE =#{item.flowCode,jdbcType=VARCHAR}
        </foreach>
    ;END;
  </update>

直接使用mybatis的foreach语句
collection:
传入的集合类型
1. 如果传入的是单参数且参数类型是一个List的时候,collection属性值为list

  1. 如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array

  2. 如果传入的参数是多个的时候,我们就需要把它们封装成一个Map了,当然单参数也可以封装成map,实际上如果你在传入参数的时候,在breast里面也是会把它封装成一个Map的,map的key就是参数名,所以这个时候collection属性值就是传入的List或array对象在自己封装的map里面的key
    index:循环迭代时的位置
    item:循环迭代时的别名
    separator:分隔符号