mybatis使用序列批量插入数据

本文介绍了一种在MyBatis中实现批量插入数据的方法,通过使用<foreach>标签来构造批量插入的SQL语句,提高了数据插入的效率。文章详细展示了适用于Oracle数据库的mapper映射文件代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  mybatis只提供了单条数据的插入,要批量插入数据我们可以使用循环一条条的插入,但是这样做的效率太低下,每插入一条数据就需要提交一次,如果数据量几百上千甚至更多,插入性能往往不是我们能接受的,如下例子可以成功的使用序列往oracle批量插入数据,

mapper映射文件代码如下:

  

 <insert id="saveList" parameterType="java.util.List">
        insert into ph_org_store(id,commorgid,areaid,detailname,address,city,shopkeeper,managemodel,ybmode,tel,fax,createuserid,createtime)
        select ui_hisiris_apply.NEXTVAL, A.*  from(
        <foreach collection="list" item="item" index="index"
            separator="UNION ALL">
            SELECT
            #{item.commOrgId,jdbcType=VARCHAR},
            #{item.areaid,jdbcType=VARCHAR},
            #{item.detailName,jdbcType=VARCHAR},
            #{item.address,jdbcType=VARCHAR},
            #{item.city,jdbcType=VARCHAR},
            #{item.shopKeeper,jdbcType=VARCHAR},
            #{item.manageModel,jdbcType=VARCHAR},
            #{item.ybMode,jdbcType=VARCHAR},
            #{item.tel,jdbcType=VARCHAR},
            #{item.fax,jdbcType=VARCHAR},
            #{item.createuserid,jdbcType=VARCHAR},
            #{item.createtime,jdbcType=DATE}
            from dual
        </foreach>
        ) A
 
    </insert>

  在此要说明的是,如果不指定 jdbcType ,如果数据为空的情况下,即时数据库允许为空依然会报异常,因为mybatis并不能识别并对空值进行转换。union 是合并提交 或者可以使用union all,区别在于union all 允许重复的数据插入,前者将会自动过滤掉。

转载于:https://www.cnblogs.com/dquery/p/6407827.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值