有关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 于上海

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值