3
回答
mybatis批量插入时获取最后一次所插入的主键一直为null
华为云实践训练营,热门技术免费实践!>>>   

配置selectKey,单条插入时,能正常获取到插入的主键,但是批量插入时,一直为null.

<selectKey order="AFTER" keyProperty="id" resultType="INTEGER">
         SELECT LAST_INSERT_ID() AS id
</selectKey>



下面是完整的代码:
personMapper.xml


<insert id="insertBatch" parameterType="java.util.List" useGeneratedKeys="true">
insert into person (id, name, age, sex, address, telephone, birthday)
values
<foreach collection="list" index="index" item="item" separator=",">
	(#{item.id,jdbcType=INTEGER}, #{item.name,jdbcType=VARCHAR}, #{item.age,jdbcType=INTEGER},
	#{item.sex,jdbcType=VARCHAR}, #{item.address,jdbcType=VARCHAR},
	#{item.telephone,jdbcType=DOUBLE},#{item.birthday,jdbcType=VARCHAR})
</foreach>

<selectKey order="AFTER" keyProperty="id" resultType="INTEGER">
        SELECT LAST_INSERT_ID() AS id
</selectKey>
		
</insert>
junit的代码:



@Test
public void testInsertBatch(){
		
		List<Person> list = new ArrayList<Person>();
		
		for(int i=0; i < 5; i++){
			Person person = new Person();
			person.setAddress("CHCS" + i);
			person.setAge(88 + i);
			person.setName("ABC" + i);
			person.setSex("男");
			person.setTelephone(454545D);
			list.add(person);
		}
		
		System.out.println(" --------------  before -------------- ");
		for(Person person:list)
			System.out.println(person.toString());
		pm.insertBatch(list);     //pm为Person类DAO层实现类的一个实例化对象
		System.out.println(" --------------  after -------------- ");
		for(Person person:list)
			System.out.println(person.toString());
	}


这里批量插入之后,遍历后的对象所有的id属性都为null,数据可以正常插入。

补充:批量插入我是按照单条记录的插入写法写的,单条记录一模一样的配置(批量就加了个<foreach>)可以正常获取id.



举报
Alittle
发帖于3年前 3回/2K+阅
顶部