1. 程式人生 > >MyBatis 3 自動生成 主鍵 針對不同的資料庫(oracle/sqlserver/mysql)

MyBatis 3 自動生成 主鍵 針對不同的資料庫(oracle/sqlserver/mysql)

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>
複製程式碼