LZYTJX 2023-09-11 18:19 采纳率: 66.7%
浏览 10
已结题

mybatis批量插入不好使

请教各位,如何批量插入

img

img

这是前端传来的数据

img

img


这是其中一个两个主表的连表的批量插入,比如刚才选择一个类型,有三条,请问后端service层中如何插入对应的条数

img


这是我写得service,现在错误显示数据库语法有错误,但是这个语法我没看出来哪个地方

img

  • 写回答

2条回答 默认 最新

  • 小明爱吃火锅 2023-09-11 18:42
    关注

    普通for循环插入

    public void testInsertBatch2() throws Exception {
        User user;
        SqlSession sqlSession = sqlSessionTemplate.getSqlSessionFactory().openSession(false);
        UserDao mapper = sqlSession.getMapper(UserDao.class);
        for (int i = 0; i < 500; i++) {
            user = new User();
            user.setId("test" + i);
            user.setName("name" + i);
            user.setDelFlag("0");
            mapper.insert(user);
        }
        sqlSession.commit();
    }
    <insert id="insert">
        INSERT INTO t_user (id, name, del_flag)
              VALUES(#{id}, #{name}, #{delFlag})
    </insert>
    

    事务BATCH模式插入

    @Test
    public void testInsertBatch2() throws Exception {
        User user;
        SqlSession sqlSession = sqlSessionTemplate.getSqlSessionFactory().openSession(ExecutorType.BATCH, false);
        UserDao mapper = sqlSession.getMapper(UserDao.class);
        for (int i = 0; i < 500; i++) {
            user = new User();
            user.setId("test" + i);
            user.setName("name" + i);
            user.setDelFlag("0");
            mapper.insert(user);
        }
        sqlSession.commit();
    }
    
    <insert id="insert">
        INSERT INTO t_user (id, name, del_flag)
              VALUES(#{id}, #{name}, #{delFlag})
    </insert>
    

    foreach方式插入

    @Test
    public void testInsertBatch() throws Exception {
        List<User> list = new ArrayList<>();
        User user;
        for (int i = 0; i < 10000; i++) {
            user = new User();
            user.setId("test" + i);
            user.setName("name" + i);
            user.setDelFlag("0");
            list.add(user);
        }
        userService.insertBatch(list);
    }
    
    <insert id="insertBatch">
        INSERT INTO t_user
                (id, name, del_flag)
        VALUES
        <foreach collection ="list" item="user" separator =",">
             (#{user.id}, #{user.name}, #{user.delFlag})
        </foreach >
    </insert>
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月28日
  • 已采纳回答 12月20日
  • 创建了问题 9月11日

悬赏问题

  • ¥25 自动填写QQ腾讯文档收集表
  • ¥15 DbVisualizer Pro 12.0.7 sql commander光标错位 显示位置与实际不符
  • ¥15 求一份STM32F10X的I2S外设库
  • ¥15 android 打包报错
  • ¥15 关于stm32的问题
  • ¥15 ncode振动疲劳分析中,noisefloor如何影响PSD函数?
  • ¥50 寻找fpga的benchmark
  • ¥50 如何在arduino上,实现用4×4矩阵键盘按键控制2004显示屏输出图中显示功能的代码?
  • ¥15 P1口接8个发光二极管,利用定时计数器1编写程序
  • ¥20 keil5编译找不到.h文件该如何解决