天天看點

Ibatis 自動生成主鍵

本文轉載于:http://www.iteye.com/topic/215571

從網上搜尋了一些mybatis自動生成主鍵的内容,拷貝以備以後友善使用:

Oracle設定:

<!-- Oracle SEQUENCE -->    

<insert id="insertProduct-ORACLE" parameterClass="com.domain.Product">    

        <selectKey resultClass="int" keyProperty="id" type="pre">    

                <![CDATA[SELECT STOCKIDSEQUENCE.NEXTVAL AS ID FROM DUAL]]>    

        </selectKey>    

        <![CDATA[insert into PRODUCT (PRD_ID,PRD_DESCRIPTION) values(#id#,#description#)]]>    

</insert>

MS SQL Server配置:

<!-- Microsoft SQL Server IDENTITY Column -->    

<insert id="insertProduct-MS-SQL" parameterClass="com.domain.Product">    

        <![CDATA[insert into PRODUCT (PRD_DESCRIPTION) values(#description#) ]]>    

        <selectKey resultClass="int" keyProperty="id" type="post">    

                <![CDATA[SELECT @@IDENTITY AS ID ]]>

                <!-- 該方法不安全 應當用SCOPE_IDENTITY() 但這個函數屬于域函數,需要在一個語句塊中執行。 -->

上述MS SQL Server配置随是官網提供的配置,但實際上卻恰恰隐患重重!按下述配置,確定獲得有效主鍵。

<!-- Microsoft SQL Server IDENTITY Column 改進-->    

        <selectKey resultClass="int" keyProperty="id">    

                <![CDATA[insert into PRODUCT (PRD_DESCRIPTION) values(#description#)

                SELECT SCOPE_IDENTITY() AS ID ]]>

MySQL配置

<!-- MySQL Last Insert Id -->

<insert id="insertProduct-Mysql" parameterClass="com.domain.Product">

        <![CDATA[insert into PRODUCT(PRD_DESCRIPTION) values(#description#)]]>    

        <selectKey resultClass="int" keyProperty="id">

                <![CDATA[SELECT LAST_INSERT_ID() AS ID ]]>    

                <!-- 該方法LAST_INSERT_ID()與資料庫連接配接綁定,同屬統一會話級别,不會發生上述MS SQL Server的函數問題。 -->

        </selectKey>

繼續閱讀