MyBatis —— 返回主键值
目录
1、使用 JDBC 方式返回主键自增的值
2、使用 selectKey 返回主键的值
1、使用 JDBC 方式返回主键自增的值
Mapper.xml 伪代码:
<insert id="insert" useGeneratedKeys="true" keyProperty="id">
insert语句
</insert>
useGeneratedKeys 设置为true后,MyBatis 会使用 JDBC的getGeneratedKeys 方法来取出由数据库内部生成的主键。获取主键值后将其赋值给 keyProperty 配置的 id 属性。
2、使用 selectKey 返回主键的值
有些数据库(如 Oracle)不提供主键自增的功能,而是使用序列得到一个值,然后将这个值赋给 id,再将数据插入数据库。这种情况可以是
MySQL 数据库对应Mapper.xml 伪代码:
<insert id="insert">
insert 语句
<selectKey keyColumn="id" resultType="long" keyProperty="id" order="AFTER">
SELECT LAST_INSERT_ID()
</selectKey>
</insert>
Oracle 数据库对应 Mapper.xml 伪代码:
<insert id="insert">
<selectKey keyColumn="id" resultType="long" keyProperty="id" order="BEFORE">
SELECT SEQ_ID.nextval from dual
</selectKey>
insert 语句
</insert>
可以发现 selectKey 元素的位置不一样,位置不一样其实不会影响 selectKey 中的方法 在 insert 前面或者后面执行的顺序,影响执行顺序的是 order 属性。
- MySQL 是先插入数据才能获取自增主键,所以selectKey在insert后执行,order属性为 AFTER。
- Oracle 是先从序列中取出主键值然后插入到数据库中,所以 selectKey 在 insert 前执行,order 属性为 BEFORE。
还没有评论,来说两句吧...