mybatis batch 批处理insert 自增主键 存在问题

5人阅读 评论(0) 收藏 举报
分类:

批处理,mybatis有2中方式

1 foreach

2 batch


分析下batch存在的问题

		SqlSession session = sqlSessionTemplate.getSqlSessionFactory()
				.openSession(ExecutorType.BATCH, false);
		
		InspectTemplateMapper inspectTemplateMapper = session.getMapper(InspectTemplateMapper.class);
		//设置每次提交的数量
		int size = insertList.size();
		int count =0 ;
		//这里要多线程处理(4个线程的线程池)
		try {
			for (int i = 0; i < size; i++) {
				
				inspectTemplateMapper.insertSelective(insertList.get(i));
				count++;
				if (i % 1000 == 0 ) {
					// 手动每1000个一提交,提交后无法回滚
					session.commit();
					// 清理缓存,防止溢出
					session.clearCache();
				}
			}
		} catch (Exception e) {
			// 没有提交的数据可以回滚
			session.rollback();
		} finally {
			session.close();
		}
		return count;

这里我用的自增主键,每次事物提交,会报出java.sql.BatchUpdateException: Field 'device_id'(主键) doesn't have a default value

查询了很多资料,有人说batch批处理只有最后一条会有自增主键,或者说mysql自增主键只有在一个事物提交时,会产生一个(个人猜想)

亲测:

批处理list只有一条数据时传入

仍然报错,否定了之前的猜想,batch不会返回自增主键

如果想要批处理还要用自增主键,在xml用foreach 设置 useGeneratedKeys="true"  keyProperty="id" 即可

查看评论

Mybatis批量插入返回自增主键

我们都知道Mybatis在插入单条数据的时候有两种方式返回自增主键: 1、对于支持禅城自增主键的数据库:useGenerateKeys和keyProperty。 2、不支持生成自增主键的数据库:。 但...
  • u014336799
  • u014336799
  • 2016-07-25 15:18:54
  • 19462

MyBatis 3.3.1 批量插入多行回写自增id

MyBatis 3.3.1支持批量插入多行回写自增id的功能,具体介绍请参看Support insert multiple rows and write-back id #547。实现原理其实现原理就...
  • FX_SKY
  • FX_SKY
  • 2016-09-01 23:19:02
  • 6717

MyBatis Insert获取自增主键ID

使用Hibernate的时候,insert插入可以很简单的获取自增主键ID。而使用MyBatis有insert select delete等操作,并没有直接获取自增主键的操作,需要手动配置。 1:p...
  • ZJW8078
  • ZJW8078
  • 2016-09-17 11:13:28
  • 864

oracle结合mybatis 实现自增主键的insert和批量insert功能(未完)

一.引子在最近的一次开发工作中,有自增主键这样的需求,而数据库使用的是oracle数据库; 由于oracle 数据库没有像mysql和sqlserver 那样提供自增主键的功能,所以在这里需要换一种思...
  • u010430099
  • u010430099
  • 2016-12-09 14:17:36
  • 2259

【MyBatis】——自增主键与非自增主键返回

mysql自增主键,执行insert提交之前自动生成一个自增主键。当时一直没有想为什么要返回主键,也就是返回就返回了吧,总是有用的,确实,返回来有可能会作为下一次查询的依据,或者下一个插入的外键的凭证...
  • xdd19910505
  • xdd19910505
  • 2016-05-31 15:22:50
  • 5508

Mybatis generator 添加记录时返回自增主键

在generator config文件配置table时修改:
  • u011403655
  • u011403655
  • 2016-02-19 10:47:52
  • 2690

mybatis 插入操作,insert_获取非自增主键的值

1:MySQL 2:oracle
  • CarryBest
  • CarryBest
  • 2017-05-05 09:23:10
  • 388

Mybatis添加功能时获取mysql自增主键和非自增主键的返回值

Mybatis获取mysql自增主键的获取 User.xml
  • dancheng1
  • dancheng1
  • 2017-01-01 11:37:40
  • 3474

mybatis insert语句中自增长

1、insert使用db自动生成主键 insert into Author (username,password,email,bio) values (#{username},#{passwor...
  • qweqwruio
  • qweqwruio
  • 2017-01-17 18:15:30
  • 918

mybatis插入数据主键自动增长处理

1.如果数据库支持自动增长,如mysql和sqlserver,那么可以设置useGeneratedKeys="true",而且设置keyProperty到你已经做好的目标属性上 例如:上面的表中已经...
  • gengyazhou123
  • gengyazhou123
  • 2016-06-06 23:27:01
  • 8390
    个人资料
    持之以恒
    等级:
    访问量: 6682
    积分: 492
    排名: 10万+