`

mybatis 插入时返回刚插入记录的主键值

阅读更多
<insert id="insert" parameterType="cn.***.beans.LogObject" >
	<selectKey resultType="java.lang.Integer" order="BEFORE" keyProperty="id">
		SELECT LOGS_SEQ.nextval AS ID FROM DUAL
	</selectKey>
	INSERT INTO S_T_LOGS (
		ID, 
		USER_ID, 
		USER_NAME, 
		USER_IP, 
		OPERATION_TIME,
 		DESCRIPTION, 
		RESOURCE_ID) 
	VALUES (
		#{id}, 
		#{userId}, 
		#{userName}, 
		#{userIp}, 
		#{operationTime},
 		#{description}, 
		#{resourceId})
</insert>

   

orcale中。传进来的参数LogObject对象里的id字段就会被赋值成sequence的值。这样就达到返回刚插入记录的主键值的效果。

 

 

<insert id="insert" parameterType="cn.***.beans.LogObject" >
	<selectKey resultType="java.lang.Integer" order="AFTER" keyProperty="id">
		  SELECT LAST_INSERT_ID() AS ID  
	</selectKey>
	INSERT INTO S_T_LOGS (
		ID, 
		USER_ID, 
		USER_NAME, 
		USER_IP, 
		OPERATION_TIME,
 		DESCRIPTION, 
		RESOURCE_ID) 
	VALUES (
		#{id}, 
		#{userId}, 
		#{userName}, 
		#{userIp}, 
		#{operationTime},
 		#{description}, 
		#{resourceId})
</insert>

 

 

mysql中。通过LAST_INSERT_ID() 获得刚插入的自动增长的id的值。

注意:selectKey中order属性的值是不同的,BEFORE先选择主键,设置keyProperty的值然后执行插入语句。

         AFTER是先执行插入语句,然后执行selectKey。

 

分享到:
评论
3 楼 bglmmz 2014-06-26  
zhangmingming_zmm001 写道
我改成这个样子了,为什么返回的值还是1呢。。。不是数据库主键自增的值啊~



你获取这个ID的方法出错了,ibatis中的insert返回的就是PK,但是mybaits的insert返回的是受影响的记录行数,要得到ID,需要用insert(Object obj)的参数得到,如obj.getId()
2 楼 530247683 2012-06-26  
zhangmingming_zmm001 写道
我改成这个样子了,为什么返回的值还是1呢。。。不是数据库主键自增的值啊~

你是传入的那个对象的id的值变化了。不是insert的返回值,insert的返回值成功就是1
1 楼 zhangmingming_zmm001 2012-06-25  
我改成这个样子了,为什么返回的值还是1呢。。。不是数据库主键自增的值啊~

相关推荐

Global site tag (gtag.js) - Google Analytics