在实际的开发,当我们需要插入多条数据时,大家很多是通过在程序中循环调用添加接口。
这种方式完全可以实现,只是在性能上有很大的损失;
可以通过下面这种方式:
这种方式完全可以实现,只是在性能上有很大的损失;
可以通过下面这种方式:
针对PostgreSQL 9.0数据库
<insert id="addNormalPlan" parameterType="list" >
<selectKey keyProperty="id" resultType="int" order="BEFORE">
select max(id)+1 from TBL_NORMAL_PLAN
</selectKey>
<![CDATA[ INSERT INTO TBL_NORMAL_PLAN( id, plan_type,
week_type, start_time,end_time) VALUES ]]>
<foreach collection="list" item="item" index="index"
separator=",">
<![CDATA[ (#{id}, #{item.planType}, #{item.weekType},
#{item.startTime}, #{item.endTime} ) ]]>
</foreach>
</insert>
list:是个对象集合,id:这里不是主键,取的最大值,可以换成主键。
这个foreach其实就是组织成insert into values(多行的值)
针对oracle的批量添加:
<insert id="addHomeworkListInfo" parameterType="list">
INSERT INTO homework_list
(homework_list_id,
homework_id,
count,
type,
content) SELECT SEQ_HOMEWORK_LIST_ID.NEXTVAL, A.* FROM(
<foreach collection="homeworkListInfo" item="item" index="index"
separator="union all">
SELECT
#{item.homeworkId},
#{item.count},
#{item.type},
#{item.content}
FROM dual
</foreach>
) A
</insert>