• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
龙师傅文徒弟
博客园    首页    新随笔    联系   管理    订阅  订阅

Oracle+Mybatis-Plus 的批量插入

Oracle的批量处理和MySQL不一样,记录踩过的坑。

1 首先是Mybatis-Plus自带的批量插入:

saveBatch方法: 它的SQL 如图所示:

 2 是利用存储过程实现批量插入的形式

Mapper 方法:
 int insertBatch(List<TabUser> list);

XML:
 <insert id="insertBatch" parameterType="java.util.List" >
        begin
        <foreach collection="list" item="item" index="index">
            insert into tab_user
            (
           id, name,age,email
            )
            values(
            #{item.id,jdbcType=DECIMAL},
            #{item.name,jdbcType=VARCHAR},
#{item.age,jdbcType=DECIMAL},
#{item.email,jdbcType=VARCHAR} );
</foreach> end; </insert>

SQL语句是拼接起来的:

 相当于如下形式: 

 3  第三种方式:利用<foreach>标签,将入参的list集合通过UNION ALL生成虚拟数据,从而实现批量插入(

Mapper: 
  int insertByForeach(List<TabUser> list);
XML:
<insert id="insertByForeach"> insert into tab_user ( id,name,age,email) select A.* from ( <foreach collection="list" item="item" index="index" separator="UNION ALL"> select #{item.id,jdbcType=DECIMAL}, #{item.name,jdbcType=VARCHAR}, #{item.age,jdbcType=DECIMAL},#{item.email,jdbcType=VARCHAR} from dual </foreach> ) A </insert>

SQL语句是union all 拼接起来的: 

运行结果:

 相当于如下形式: 

 

 4 使用特殊的sql语句 形式如下:

Mapper:
int insertOneSql(List<TabUser> list);
XML:

 <insert id="insertOneSql">
        insert all
        <foreach collection="list" item="item" index="index">
            into tab_user(id,name,age,email) 
            values(
            #{item.id,jdbcType=DECIMAL}, #{item.name,jdbcType=VARCHAR},
            #{item.age,jdbcType=DECIMAL},#{item.email,jdbcType=VARCHAR}
            )
        </foreach>
        select 1 from dual
    </insert>

运行结果:

 

posted @ 2021-12-16 14:42  龙师傅文徒弟  阅读(6532)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3