有關MyBatis中的主鍵設置問題

我們知道在往數據庫插入數據的時候,大多時候會要求數據自動給我們設置一個唯一的主鍵。
比如MySql中的自增主鍵和UUID()Oracle中的SequenceSYS_GUID()都是用來生成唯一主鍵的。

那麼在MyBatis中要怎樣來使用相應數據庫中的特性來設置主鍵呢?


下面的例子中,我們使用User(userId,userName)來做相應的測試

如何使用MySQL等數據庫的自增屬性

我們可以設置useGeneratedKeys="true",然後再把 keyProperty 設置到目標屬性(userId)上就 OK 了

    <insert id="insertUser" useGeneratedKeys="true" keyProperty="userId">
        INSERT INTO USER(USER_NAME)
        VALUES (#{userName})
    </insert>

如何在Oracle等不支持自增屬性的數據庫中生成主鍵

Oracle數據庫中如何調用Sequence來設置主鍵呢?

MyBatis中提供了selectKey屬性來解決這一問題。
我們只要在插入語句執行之前執行selectKey裏面的語句,將執行結果設置到目標屬性(userId)上就行了。

    <insert id="insertUser">
        <!--order屬性設置該語句相對插入語句執行的順序-->
        <selectKey keyProperty="userId" resultType="int" order="BEFORE">
            SELECT SQ_USER.NEXTVAL FROM DUAL
        </selectKey>
        INSERT INTO USER(USER_ID,USER_NAME)
        VALUES (#{userId},#{userName})
    </insert>

當然,上的語句是將Sequence的值設置到userId中去,當然我們也可以將UUID()或者SYS_GUID()獲取的值設置到目標屬性中去。


2017-11-17 11:13 於上海

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章