有关MyBatis中的主键设置问题

Posted 十木禾

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有关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 于上海

以上是关于有关MyBatis中的主键设置问题的主要内容,如果未能解决你的问题,请参考以下文章

MyBatis应用记录:MyBatis如何得到插入数据之后的主键值

mybatis 中如何获取自动生成的主键

Mybatis在insert时返回主键id

Mybatis使用问题:查询一对多或多对多时只返回一条数据的问题

Mybatis 怎么返回insert插入的主键

Mybatis里Mapper映射sql文件里insert的主键返回selectKey使用