<insert id="insertUser" parameterClass="po.User"><selectKey resultClass="int" keyProperty="userId" >SELECT user_account_s.nextval AS userid FROM dual</selectKey>insert into user_account(userid, username, password, groupname)values(#userId#, #userName#, #password#, #groupName#)</insert>
<insert id="insertUser" parameterClass="po.User">insert into user_account(userid, username, password, groupname)values(#userId#, #userName#, #password#, #groupName#)<selectKey resultClass="int" keyProperty="userId" >SELECT @@IDENTITY as userid</selectKey></insert>
<insert id="MS-SYS-SEQ-INSERT">
<![CDATA[insert into sys_seq(name) values (#name#)]]><selectKey resultClass="long" keyProperty="id"><![CDATA[SELECT LAST_INSERT_ID() AS ID ]]></selectKey></insert>
selectKey元素部分其实既可以放在insert语句之前也是可以放在其后的,放在之前的话就用nextval,放在之后的话就用currval。如果放在之前用currval就会报错提示要先进行nextval操作再currval。<insert id="addStudent" parameterClass="Student"> <selectKey resultClass="int" keyProperty="id"> select seq_student.nextval as value from dual <!-- 这里需要说明一下不同的数据库主键的生成,对各自的数据库有不同的方式: --> <!-- mysql:SELECT LAST_INSERT_ID() AS VALUE --> <!-- mssql:select @@IDENTITY as value --> <!-- oracle:SELECT STOCKIDSEQUENCE.NEXTVAL AS VALUE FROM DUAL --> <!-- 还有一点需要注意的是不同的数据库生产商生成主键的方式不一样,有些是预先生成 (pre-generate)主键的,如Oracle和PostgreSQL。 有些是事后生成(post-generate)主键的,如MySQL和SQL Server 所以如果是Oracle数据库,则需要将selectKey写在insert之前 --> </selectKey> insert into tbl_student(id,name,birth,score) values (#id#,#name#,#birth#,#score#) </insert>
<insert id="addStudent" parameterClass="Student"> insert into tbl_student(id,name,birth,score) values (#id#,#name#,#birth#,#score#) <selectKey resultClass="int" keyProperty="id"> select seq_student.currval as value from dual </selectKey>
</insert>