MyBatis批量插入数据SQL—Oracle与MySql的写法

在开发的过程会遇到往数据库(Oracle与MySql)表中批量插入数据的业务场景。但用MyBatis在执行批量插入的过程中总是报sql未正确结束的问题,经过搜索发现MySql与Oracle的批量插入的sql语句写法不一致。

示例为xxmapper.xml中的部分代码片断
1、Oracle写法一:

<!--2、批量插入 投诉与表扬信息-->
<insert id="insertBatchComplaintsPraise" parameterType="java.util.List" >
   INSERT INTO TSYBY (JGMC, TDMC, TDZXM, YISHENG, YAOJISHI, HUSHI, FANGBAO, TSYBY, STATIC_DATE, UPLOAD_DATE)
   VALUES 
    <foreach collection="list" item="item" index="index" open="(" separator="union all" close=")" >
        select 	#{item.jgmc,jdbcType=VARCHAR}, #{item.tdmc,jdbcType=VARCHAR}, #{item.tdzxm,jdbcType=VARCHAR}, 
        		#{item.yisheng,jdbcType=VARCHAR}, #{item.yaojishi,jdbcType=VARCHAR}, #{item.hushi,jdbcType=VARCHAR}, 
        		#{item.fangbao,jdbcType=VARCHAR}, #{item.tsyby,jdbcType=DECIMAL}, #{item.staticDate,jdbcType=DATE}, 
        		#{item.uploadDate,jdbcType=TIMESTAMP}
        from dual
    </foreach>
  </insert>

2、Oralce写法二:

<!--2、批量插入 投诉与表扬信息-->
<insert id="insertBatchComplaintsPraise" parameterType="java.util.List" >
    insert all
   	<foreach collection="list" item="item" index="index">
   		into TSYBY (STATION_CODE, JGMC, TEAM_ID, TDMC, TDZXM, YISHENG, YAOJISHI, HUSHI, FANGBAO, TSYBY, STATIC_DATE, UPLOAD_DATE)
   		values (#{item.stationCode,jdbcType=VARCHAR}, #{item.jgmc,jdbcType=VARCHAR}, #{item.teamId,jdbcType=VARCHAR}, 
   				#{item.tdmc,jdbcType=VARCHAR}, #{item.tdzxm,jdbcType=VARCHAR}, #{item.yisheng,jdbcType=VARCHAR}, 
        		#{item.yaojishi,jdbcType=VARCHAR}, #{item.hushi,jdbcType=VARCHAR}, #{item.fangbao,jdbcType=VARCHAR}, 
        		#{item.tsyby,jdbcType=DECIMAL}, #{item.staticDate,jdbcType=DATE}, #{item.uploadDate,jdbcType=TIMESTAMP})
   	</foreach>
    select 1 from dual
</insert>

以上为Oracle中批量插入的两种方式,但方式一有个缺点,就是所查询的字段不能有空值,即 item.xxx 不能为空,否则插入会失败。

3、MySql写法:示例如下

<!-- 2、批量插入 团队评价与满意度数据  -->
<insert id="insertBatchSatisfaction" parameterType="java.util.List">
  	insert into pe_team_evaluation_satisfaction (
  		id, 
  		org_code, org_name, 
  		team_id, team_name, team_leader_name, 
      	praise_complaint_score, service_gain_ratio, 
      	signpatient_satisfaction, sign_service_awareness, 
      	team_satisfaction, fill_year, 
      	add_org_id, add_org_name, add_user_id, 
      	add_user_name, add_time
      )
    values 
    <foreach collection="record" item="item" index="index" separator="," >
    	(#{item.id,jdbcType=VARCHAR}, 
    	#{item.orgCode,jdbcType=VARCHAR}, #{item.orgName,jdbcType=VARCHAR}, 
    	#{item.teamId,jdbcType=VARCHAR}, #{item.teamName,jdbcType=VARCHAR}, #{item.teamLeaderName,jdbcType=VARCHAR}, 
      	#{item.praiseComplaintScore,jdbcType=DECIMAL}, #{item.serviceGainRatio,jdbcType=DECIMAL}, 
      	#{item.signpatientSatisfaction,jdbcType=DECIMAL}, #{item.signServiceAwareness,jdbcType=DECIMAL}, 
      	#{item.teamSatisfaction,jdbcType=DECIMAL}, #{item.fillYear,jdbcType=DATE}, 
      	#{item.addOrgId,jdbcType=VARCHAR}, #{item.addOrgName,jdbcType=VARCHAR}, #{item.addUserId,jdbcType=VARCHAR}, 
      	#{item.addUserName,jdbcType=VARCHAR}, #{item.addTime,jdbcType=TIMESTAMP})
    </foreach>
</insert>
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值