MyBatis 如何获取自增主键的值

获取自增主键的值

MySql 的主键是支持自增的。在某些场景下,我们在对于一条数据插入之后,需要获得对应自增之后的 id 值,但是如果在通过其他属性(姓名、年龄等属性)在查找一次很麻烦。MyBatis 为我们提供了一个很好的实现方法

修改我们的映射文件,参考如下

	<insert id="insertEmp" keyColumn="emp_id"
		keyProperty="empId" useGeneratedKeys="true">
		insert into emp(emp_name,emp_mail,emp_gender,dept_id)
		values(#{empName},#{empMail},#{empGender},#{deptId})
	</insert>
  • keyColumn :数据表中的主键列名
  • keyProperty:对应主键实体类的属性名
  • useGenerateKeys:调用 JDBC 的 getGeneratedKeys 方法获取数据库内部生成的主键。(像 MySQL 和 SQL Server 这样的关系型数据库管理系统的自动递增字段)默认 false
  • 以上三个只能用于 insert 和 update

获取非自增主键的值

上面是基于能够自增主键的,但是对于 Oracle 数据库来说,是不支持自增主键 Id 的值,那么如何获取?

Oracle 的主键自增,是通过序列完成的。

  1. 首先,创建序列,并自增一个且查询值
create sequence seq_2020721;
select seq_2020721.nextval from dual; -- 查询下一个值
  1. 修改上面的 insert 标签
<insert id="insertEmp">
		<selectKey keyColumn="emp_id" keyProperty="empId"
			resultType="int" order="BEFORE">
			select seq_id712.nextval from dual
		</selectKey>
		insert into emp_712
		values(#{empId},#{empName},#{empMail},#{empGender},#{deptId})
	</insert>
  • selectKey 标签

    • 表示查询一个值,作为新增数据的主键
    • keyColumn :数据表中的主键列名
    • keyProperty:对应主键实体类的属性名
    • resultType:返回结果类型
    • order:表示是新增之前执行,还是新增之后执行查询
      • BEFORE:表示新增之前
      • AFTER:表示新增之后

如果是新增之后在查询主键怎么写?
修改 insert 标签

	 <insert id="insertEmp" >
		<selectKey keyColumn="emp_id" keyProperty="empId" resultType="int" order="AFTER">
            <!-- 获取当前主键的值 -->
	 		select seq_2020721.currval from dual
	 	</selectKey>
	 	insert into emp_721(emp_id,emp_name,emp_mail,emp_gender,dept_id) values(seq_2020721.nextval,#{empName},#{empMail},#{empGender},#{deptId})
	 </insert>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值