我们在数据库插入一条数据的时候,经常是需要返回插入这条数据的主键。但是数据库供应商之间生成主键的方式都不一样。
有些是预先生成(pre-generate)主键的,如Oracle和PostgreSQL;有些是事后生成(post-generate)主键的,如MySQL和SQL Server。但不管是哪种方式,我们都可以用ibatis的节点来获取语句所产生的主键。
1、oracle例子:
<insert id="insertProduct-ORACLE" parameterClass="product"> <selectKey resultClass="int" type="pre" keyProperty="id" > SELECT STOCKIDSEQUENCE.NEXTVAL AS VALUE FROM DUAL </selectKey> insert into PRODUCT (PRD_ID,PRD_DESCRIPTION) values (#id#,#description#) </insert>
2、sql-server例子:
<insert id="insertProduct-MS-SQL" parameterClass="product"> insert into PRODUCT (PRD_DESCRIPTION) values (#description#) <selectKey resultClass="int" type="post" keyProperty="id" > select @@IDENTITY as value </selectKey> </insert>
3、mysql例子:
<insert id="insertProduct-MYSQL" parameterClass="product"> insert into PRODUCT (PRD_DESCRIPTION) values (#description#) <selectKey resultClass="int" type="post" keyProperty="id" > select LAST_INSERT_ID() as value </selectKey> </insert>
2、SQLite例子:
<insert id="Create" parameterClass="Subject"> INSERT INTO SUBJECT (SubjectName,QuestionCount,IsNowPaper) VALUES(#SubjectName#,#QuestionCount#,#IsNowPaper#) <selectKey resultClass="int" type="post" property="SubjectId"> SELECT seq FROM sqlite_sequence WHERE (name = 'SUBJECT') </selectKey> </insert><span style="font-family: 微软雅黑, 'Microsoft YaHei'; background-color: rgb(255, 255, 255);"> </span>
注意:name = 'SUBJECT'中SUBJECT为表名称