Mybatis中Mysql和Oracle的批量保存

MYSQL的批量保存:

<!-- MYSQL:批量保存记得切换数据源(allowMultiQueries=true)
	这种分号分隔多个SQL可一个用于其他的批量操作(删除,修改)-->
	<!--  public void addDepts(@Param("depts") List<Dept> depts); -->
	<insert id="addDepts" databaseId="mysql">
		<foreach collection="depts" item="dept" separator=";">
		insert into dept(deptno,dname,loc)
		values(#{dept.deptno},#{dept.dname},#{dept.loc})
		</foreach>
	</insert>
Oracle的批量保存:两种方法
<!-- Oracle:批量保存
		方法1:多个INSERT放在begin ...end之间
		begin 
       		insert into dept(deptno,dname,loc) values (dept_seq.nextval,'111','AAA');
      		insert into dept(deptno,dname,loc) values (dept_seq.nextval,'222','BBB');
		end;
		方法2利用中间表
		insert into dept(deptno,dname,loc) 
         select dept_seq.nextval,dname,loc from(
                select '333' dname ,'CCC' loc from dual
                union
                 select '444' dname,'DDD' loc from dual
                  union
                 select '555' dname,'EEE' loc from dual
         )
	 -->
	 <!--  public void addDepts(@Param("depts") List<Dept> depts); -->
	<insert id="addDepts" databaseId="oracle" 
	parameterType="com.jadeon.mybatis.bean.Dept">
	<!-- Oracle:批量保存方法1  -->
		<!-- <foreach collection="depts" item="dept" open="begin" close="end;">
       		insert into dept(deptno,dname,loc) 
       			values (dept_seq.nextval,#{dept.dname},#{dept.loc});
		</foreach> -->
	<!-- Oracle:批量保存方法2  -->
	insert into dept(deptno,dname,loc) 
		select dept_seq.nextval,dname,loc from(
			<foreach collection="depts" item="dept" separator="union" >
		       		select #{dept.dname} dname ,#{dept.loc} loc from dual
			</foreach>
		)
	</insert>


猜你喜欢

转载自blog.csdn.net/love_moon821/article/details/78787360