Mybatis中自动生成主键在mysql和Oracle当中的情况
Mybatis中自动生成主键
在INSERT语句中,我们为可以自动生成(auto-generated)主键的列 STUD_ID 插入值。我们可以使用useGeneratedKeys和keyProperty属性让数据库生成auto_increment列的值,并将生成的值设置到其中一个输入对象属性内,如下所示:-
<insert id="insertStudent" parameterType="Student" useGeneratedKeys="true" keyProperty="studId">
-
INSERT INTO STUDENTS(NAME, EMAIL, PHONE) VALUES(#{name},#{email},#{phone})
-
</insert>
但是有些数据库如Oracle并不支持AUTO_INCREMENT列,其使用序列(SEQUENCE)来生成主键值。假设我们有一个名为my_seq的序列来生成SUTD_ID主键值。使用如下代码来生成主键:
drop sequence my_seq;
create sequence my_seq;
-
<insert id="insertStudent" parameterType="Student">
-
<selectKey keyProperty="studId" resultType="int" order="BEFORE">
-
SELECT my_seq.nextval FROM DUAL
-
</selectKey>
-
INSERT INTO STUDENTS(STUD_ID,NAME,EMAIL, PHONE)
-
VALUES(#{studId},#{name},#{email},#{phone})
-
</insert>
-
注:SelectKey需要注意order属性,像MySQL、SQLServer等一类支持自动增长类型的数据库中,order需要设置为after才会取到正确的值。
像Oracle这样取序列的情况,需要设置为before,否则会报错。
来自:https://blog.csdn.net/suwu150/article/details/52895855