MyBatis 3 自動生成 主鍵 針對不同的資料庫(oracle/sqlserver/mysql)
阿新 • • 發佈:2019-01-28
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>