Mybatis如何获取生成的主键呢?

乔欣 Java面经 发布时间:2022-11-09 22:16:14 阅读数:2263 1 MyBatis面试题(2023优化版)
下文笔者讲述Mybatis插入表后---获取生成主键的方法分享,如下所示
mybatis获取生成主键
  我们需从MySQL和Oracle数据库上,进行不同的对待
  如下例所示

Mybatis获取MySQL数据库生成的主键

<!-- useGeneratedKeys 设置为"true"
  说明MyBatis要获取由数据库自动生成的主键
   keyColumn指定数据库主键
  keyProperty指定 Java 实体类中对应的主键字段 -->

<insert id="insertUser" useGeneratedKeys="true" keyProperty="userId" >
  insert into user(
  user_name, userage, create_time)
  values(#{userName}, #{userage} , #{createTime, jdbcType= TIMESTAMP})
</insert>

parameterType也可不写
Mybatis可自动推断出传入的数据类型

Oracle获取生成的主键

由于Oracle数据库,没有提供主键自增的功能
   而是使用序列的方式获取自增主键 
所以我们不能采用selectKey的方式获取主键,那么Oracle该如何获取主键呢?下文将一一道来,如下所示  

<insert id="insertUser" >
<selectKey keyColumn="id" resultType="long" keyProperty="userId" order="BEFORE">
SELECT USER_ID.nextval as id from dual
</selectKey>
insert into user(
user_id,user_name, userage, create_time)
values(#{userId},#{userName}, #{userage} , #{createTime, jdbcType= TIMESTAMP})
</insert>
属性 备注
keyProperty selectKey 语句结果应该被设置的目标属性
如果希望得到多个生成的列,
也可以是逗号分隔的属性名称列表
keyColumn 匹配属性的返回结果集中的列名称
如果希望得到多个生成的列,
也可以是逗号分隔的属性名称列表
resultType 结果的类型
MyBatis可推算出来
MyBatis 允许任何简单类型用作主键的类型
包括字符串
如果希望作用于多个生成的列
则可以使用一个包含期望属性的 Object 或一个 Map
order 值可为BEFORE 或 AFTER
当值是BEFORE
会先执行selectKey设置 keyProperty
然后执行插入语句
AFTER则相反
statementType 使用何种语句类型,默认PREPARED。有STATEMENT,PREPARED 和 CALLABLE 语句的映射类型
此时会将Oracle生成的主键值赋予userId变量。这个userId 就是USER对象的属性,
这样就可以将生成的主键值返回
如果仅仅是在insert语句中使用但是不返回
此时keyProperty=“任意自定义变量名”
resultType 可以不写
Oracle 数据库中的值要设置为 BEFORE
这是因为 Oracle中需要先从序列获取值,
然后将值作为主键插入到数据库中
mysql获取主键注意事项:
    当我们使用selectKey方式主键,需注意以下操作
	   1.order:AFTER
	   2.获取递增主键值:SELECT LAST_INSERT_ID()
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaMianJing/202211/16680047254850.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者