(四)Mybatis当中如何在新增之后返回对象的自增id值?

这篇文章主要讲述Mybatis在面对于不同数据库如何在新增之后返回自增id值,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。

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);

测试代码

Employee employee = new Employee(null, "5",null, "5");
mapper.addEmp(employee);
System.out.println(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
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

怪 咖@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值