MyBatis自動生成的主鍵很多數據庫支持自動生成主鍵的數據類型。不過這通常(並不總是)是個私有的特性。SQL Map 通過<insert>的子元素<selectKey>來支持自動生成的鍵值。它同時支持預生成(如Oracle)和后生成兩種類型(如 MS-SQL Server MySQL)。
一、Oracle設置
<insert id="saveUserInfo" parameterType="UserInfo"> <selectKey resultType="int" keyProperty="userId" order="BEFORE"> <![CDATA[SELECT SEQ_COMMON.NEXTVAL AS ID FROM DUAL]]> </selectKey> <![CDATA[insert into userinfo(userId,userName,phone,age,birthday,remark) values(#{userId},#{userName},#{phone},#{age},#{birthday},#{remark})]]> </insert>
注意:
1、MyBatis3已使用resultType ,resultClass是會報錯的!
2、order="BEFORE" 上,這個必須要寫明,生成序列在之前。在ibatis中使用type="pro" ,但在MyBatis3中必須使用order否則報錯!
3、selectKey中的 keyProperty 要和 insert into中的 插入的參數 要一致 keyProperty="userId" 如: insert into userinfo (userId) VALUES (#{userId})
注意以上三點就OK了。
二、mysql設置
<insert id="saveUserInfo" parameterType="UserInfo" useGeneratedKeys="true" keyProperty="id"> insert into userinfo(userName,phone,age,birthday,remark) values(#{userName},#{phone},#{age},#{birthday},#{remark}) </insert>
mysql就簡單了!
三、MS-SQL配置(本人沒有測試過!)
<!-- Microsoft SQL Server IDENTITY Column 改進--> <insertid="insertProduct-MS-SQL"parameterClass="com.domain.Product"> <selectKeyresultClass="int"keyProperty="id"> <![CDATA[insert into PRODUCT (PRD_DESCRIPTION) values(#description#) SELECT SCOPE_IDENTITY() AS ID ]]> </selectKey> </insert>