1.mysql
mysql支持自增主键,自增主键值的获取,mybatis也是利用statement.getGenreatedKeys()
useGeneratedKeys="true
使用自增主键获取主键值策略
keyProperty
获取到主键值封装给java bean哪个属性
<insert id="firstInsert" parameterType="xxx.xxx.xxx.Employee" useGeneratedKeys="true" keyProperty=“id”>
insert into employee(last_name, email, gender) values(#{lastName}, #{email}, #{gender})
</insert>
Employee employee = new Employee(...);
mapper.firstInsert(employee);
System.out.println(employee.getId());
2. oracle
oracle使用序列模拟自增
<insert id="firstInsert" parameterType="xxx.xxx.xxx.Employee" databaseId="oracle">
<selectKey keyProperty="id" order="BEFORE" resultType="Integer">
<!-- keyProperty: 查出的主键值封装给java bean的哪个属性 -->
<!-- BEFORE: 当前sql在插入sql之前执行 -->
<!-- resultType: 查出数据的返回类型 -->
select employee.nextval from employee
</selectKey>
insert into employee(id, last_name, email, gender) values(#{id}, #{lastName}, #{email}, #{gender})
</insert>
或
<insert id="firstInsert" parameterType="xxx.xxx.xxx.Employee" databaseId="oracle">
<selectKey keyProperty="id" order="AFTER" resultType="Integer">
select employee.currval from employee
</selectKey>
insert into employee(id, last_name, email, gender) values(employee_seq.nextval, #{lastName}, #{email}, #{gender})
</insert>