【MyBatis】插入数据时获取自动生成的主键
前提:
主键是自动生成的。
业务背景:
一个用户有多个角色。
- 插入一条新的记录之后,自动生成了主键,而这个主键需要在其他表中使用时。
- 插入一个用户数据的同时需要给该用户分配角色:需要将生成的用户的id插入到角色表的user_id字段上。
- 第一种方式:可以先插入用户数据,再写一条查询语句获取id,然后再插入user_id字段。【比较麻烦】
- 第二种方式:mybatis提供了一种方式更加便捷。
MyBatis中获取主键
CarMapper接口
int insertCarUserGeneratedKeys(Car car);
CarMapper.xml文件
<!--
useGeneratedKeys="true" 使用自动生成的主键值。
keyProperty="id" 指定主键值赋值给对象的哪个属性。这个就表示将主键值赋值给Car对象的id属性。
-->
<insert id="insertCarUseGeneratedKeys" useGeneratedKeys="true" keyProperty="id"> insert into t_car values(null,#{carNum},#{brand},#{guidePrice},#{produceTime},#{carType}) </insert>
- useGeneratedKeys=“true” 使用自动生成的主键值。
- keyProperty=“id” 指定主键值赋值给对象的哪个属性。这个就表示将主键值赋值给Car对象(根据你的需求指定对象,这里以car为例)的id属性。
Test
@Test
public void testInsertCarUserGeneratedKeys(){
SqlSession sqlSession = SqlSessionUntil.openSession();
CarMapper mapper = sqlSession.getMapper(CarMapper.class);
Car car = new Car(null,"9991","凯美瑞",30.0,"2020-11-11","燃油车");
mapper.insertCarUserGeneratedKeys(car);
System.out.println(car);
sqlSession.commit();
sqlSession.close();
}
运行结果及结论
总结:测试通过,数据库表中添加字段成功,成功获取到插入数据时获取自动生成的主键。