有关MyBatis中的主键设置问题
Posted 十木禾
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有关MyBatis中的主键设置问题相关的知识,希望对你有一定的参考价值。
我们知道在往数据库插入数据的时候,大多时候会要求数据自动给我们设置一个唯一的主键。
比如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 于上海
以上是关于有关MyBatis中的主键设置问题的主要内容,如果未能解决你的问题,请参考以下文章
MyBatis应用记录:MyBatis如何得到插入数据之后的主键值