记录工作中的小经验,针对工作中项目业务需要做批量新增和修改信息;
项目采用的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
如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array
如果传入的参数是多个的时候,我们就需要把它们封装成一个Map了,当然单参数也可以封装成map,实际上如果你在传入参数的时候,在breast里面也是会把它封装成一个Map的,map的key就是参数名,所以这个时候collection属性值就是传入的List或array对象在自己封装的map里面的key
index:循环迭代时的位置
item:循环迭代时的别名
separator:分隔符号