我们在数据库中设置主键的时候,一般都会进行设置主键自增策略,我们只需进行管理数据的重要内容,让一个存储我们信息的id设置为主键并且自增给我们的数据来提供一个唯一标识,但是我们之前在对数据库执行插入操作的时候,我们并不知道插入的这条数据在数据库中现在编号是几,为了能够使用这个id值,Mybatis给我们提供了如下方法
获取自动生成的主键
我们之前的插入方法,我们来进行修改,把结果进行打印:
<insert id="insertEmp" parameterType="MyEmp" >
insert into emp (name,age,birthday,salary) values (#{name},#{age},#{birthday},#{salary})
</insert>
测试代码:
@Test
public void testInsertEmp(){
Emp emp = new Emp(null,"罗杰",40,new Date(),new BigDecimal(1000));
SqlSession sqlSession = MybatisUtil.getSession();
EmpMapper empMapper = sqlSession.getMapper(EmpMapper.class);
empMapper.insertEmp(emp);
sqlSession.commit();
System.out.println(emp);
}
结果:
这里是无法获取返回的id值的。
我们打开文档,查找映射文件的属性:
我们发现黄色框内三个属性只对insert 和 update有效,上面描述的还是有点抽象,简单来说就是:
useGeneratedKeys:就是让选择是否返回自动生成的主键,默认的是false,如果想要返回主键,那么就自定义为true
KeyProperty : 就是让选择把获取的主键传递给传入的对象的那个属性。
keyColumn : 让选择是从哪一列来获取一个自动生成的主键。比如我们是id,就把id传入。
现在更改代码:
<insert id="insertEmp" parameterType="MyEmp" useGeneratedKeys="true" keyProperty="id" keyColumn="id">
insert into emp (name,age,birthday,salary) values (#{name},#{age},#{birthday},#{salary})
</insert>
然后再次执行:
这三个属性对于Insert和update有用,但是一般对于更改操作,我们一般都是知道这条信息的一些值然后来进行更改,所以一般用这个功能比较少,对于insert操作来说是非常实用的。