新增之后返回对象的自增id值 Mybatis

1、Mysql当中解决方案

mysql支持自增主键,自增主键值的获取,mybatis也是利用statement.getGenreatedKeys();
useGeneratedKeys=“true”;使用自增主键获取主键值策略
keyProperty;指定对应的主键属性,也就是mybatis获取到主键值以后,将这个值封装给javaBean的哪个属性
 

<insert id="addEmp" parameterType="com.gzl.mybatis.bean.Employee"
	useGeneratedKeys="true" keyProperty="id" databaseId="mysql">
	insert into tbl_employee(last_name,email,gender) 
	values(#{lastName},#{email},#{gender})
</insert>

添加完以上配置之后,接口返回Long也行

public Long addEmp(Employee employee);

在执行完添加之后可以直接用添加的对象

//执行添加方法
xxxMapper.addEmp(employee);
//新增之后的id
employee.getId;

2、Oracle当中解决方案

oracle当中没有主键自增,一般我们都是使用oracle当中的序列来实现主键自增,所以他和mysql当中的解决方案就不一样了。
针对于oracle我们需要使用到selectKey这个标签
selectKey标签当中的属性有:

keyProperty:查出的主键值封装给javaBean的哪个属性
order=“BEFORE”:当前sql在插入sql之前运行
             AFTER:当前sql在插入sql之后运行
resultType:查出的数据的返回值类型‘

BEFORE的用法
EMPLOYEES_SEQ.nextval 代表取EMPLOYEES_SEQ序列的下一个值

<insert id="addEmp" parameterType="com.gzl.mybatis.bean.Employee" databaseId="oracle">
	<selectKey keyProperty="id" order="BEFORE" resultType="Integer">
		<!-- 编写查询主键的sql语句 -->
		select EMPLOYEES_SEQ.nextval from dual 
	</selectKey>
	
	<!-- 插入时的主键是从序列中拿到的 -->
	insert into employees(EMPLOYEE_ID,LAST_NAME,EMAIL) 
	values(#{id},#{lastName},#{email}) 
</insert>

AFTER的用法,这种不建议使用。并发的时候有时候可能会出现返回id不准确的问题。

<insert id="addEmp" parameterType="com.gzl.mybatis.bean.Employee" databaseId="oracle">

	<!-- 插入时的主键是从序列中拿到的 -->
	insert into employees(EMPLOYEE_ID,LAST_NAME,EMAIL) 
	values(employees_seq.nextval,#{lastName},#{email})
	
	<selectKey keyProperty="id" order="AFTER" resultType="Integer">
		 select EMPLOYEES_SEQ.currval from dual
	</selectKey>
</insert>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值