我們知道在往數據庫插入數據的時候,大多時候會要求數據自動給我們設置一個唯一的主鍵。
比如MySql
中的自增主鍵和UUID()
,Oracle
中的Sequence
和SYS_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 於上海