selectKey 标签
借鉴:https://www.cnblogs.com/duanxz/p/3862315.html
https://yq.aliyun.com/articles/122887
在insert语句中,在Oracle经常使用序列、在MySQL中使用函数来自动生成插入表的主键,而且需要方法能返回这个生成主键。使用myBatis的selectKey标签可以实现这个效果。
SelectKey在Mybatis中是为了解决Insert数据时不支持主键自动生成的问题,他可以很随意的设置生成主键的方式。
不管SelectKey有多好,尽量不要遇到这种情况吧,毕竟很麻烦。
属性 | 描述 |
---|---|
keyProperty | selectKey 语句结果应该被设置的目标属性。 |
resultType | 结果的类型。MyBatis 通常可以算出来,但是写上也没有问题。MyBatis 允许任何简单类型用作主键的类型,包括字符串。 |
order | 这可以被设置为 BEFORE 或 AFTER。如果设置为 BEFORE,那么它会首先选择主键,设置 keyProperty 然后执行插入语句。如果设置为 AFTER,那么先执行插入语句,然后是 selectKey 元素-这和如 Oracle 数据库相似,可以在插入语句中嵌入序列调用。 |
statementType | 和前面的相 同,MyBatis 支持 STATEMENT ,PREPARED 和CALLABLE 语句的映射类型,分别代表 PreparedStatement 和CallableStatement 类型。 |
SelectKey需要注意order属性,像Mysql一类支持自动增长类型的数据库中,order需要设置为after才会取到正确的值。
像Oracle这样取序列的情况,需要设置为before,否则会报错。
另外在用Spring管理事务时,SelectKey和插入在同一事务当中,因而Mysql这样的情况由于数据未插入到数据库中,所以是得不到自动增长的Key。取消事务管理就不会有问题。
<insert id="insertSelective" parameterType="com.huatek.compass.frame.entity.Role">
<selectKey keyProperty="id" resultType="String" order="BEFORE">
select replace(uuid(),'-','') from dual
</selectKey>
insert into sys_role
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="id != null">
id,
</if>
<if test="active != null">
active,
</if>
<if test="comment != null">
comment,
</if>
<if test="role != null">
role,
</if>
<if test="groupId != null">
group_id,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="id != null">
#{id,jdbcType=VARCHAR},
</if>
<if test="active != null">
#{active,jdbcType=INTEGER},
</if>
<if test="comment != null">
#{comment,jdbcType=VARCHAR},
</if>
<if test="role != null">
#{role,jdbcType=VARCHAR},
</if>
<if test="groupId != null">
#{groupId,jdbcType=VARCHAR},
</if>
</trim>
</insert>
selectKey 标签相关推荐
- MyBatis—insert语句返回主键和selectKey标签
本文已同步至个人博客liaosi's blog - MyBatis-insert语句返回主键和selectKey标签 往数据库中插入一条记录后,有时候我们需要这条记录的主键,用于后续的操作.如果在插入 ...
- mybatis之selectKey标签
保存数据后,得到自增长的主键id,用于处理其他业务逻辑 可以使用mybatis为我们提供的 selectKey标签 <selectKey resultType="java.lang.I ...
- Mybatis中selectKey 标签的作用,主键回填,找了好多文章没一个解释清楚。。
(1)没有配置selectKey 标签时候插入数据: <insert id="addUser" parameterType="model.User"> ...
- Mybatis学习之selectKey标签用法
Mybatis学习之selectKey标签用法 前言 实现流程 Mapper.xml文件配置 属性介绍 前言 需求说明 主从表入库时,从表需要获取主表中的最后入库自增id,可以借助Mybatis中se ...
- mybatis的配置文件中selectKey标签问题
1.mybatis的配置文件中,使用sequence生成主键 未执行add方法之前,主键未生成(null):刚执行add之后,主键即生成(212) 这里的重点是,一旦执行add方法,配置文件中的sel ...
- selectKey标签详解
1.为什么要使用selectKey 数据库主键包括自增和非自增,有时候新增一条数据不仅仅知道成功就行了,后边的逻辑可能还需要这个新增的主键,这时候再查询数据库就有点耗时耗力,我们可以采用selectK ...
- selectKey标签详解(*)
1.为什么要使用selectKey 数据库主键包括自增和非自增,有时候新增一条数据不仅仅知道成功就行,后边的逻辑可能还需要这个新增的主键,这时候再查询数据库就有点儿耗时耗力,我们可以采用selectK ...
- <selectKey>标签的作用
作用: 一些情况下,新增一条数据信息,但其主键(id)是数据库自动在数据库生成(自增),而有些业务逻辑的处理是需要要到这个生成的主键(id). 标签就是用来获取这个生成的主键(id) 例: <i ...
- MyBatis中的selectKey
2019独角兽企业重金招聘Python工程师标准>>> SelectKey在Mybatis中是为了解决Insert数据时不支持主键自动生成的问题,他可以很随意的设置生成主键的方式. ...
最新文章
- 15万奖金强化学习赛事!Go-Bigger多智能体决策智能挑战赛来了!
- ant design后台模板-1.前端环境搭建
- 【Keras】Linux一个shell脚本安装python、keras、tensorflow、anaconda等~
- CentOS添加一个新的硬盘、添加分区到挂载的过程
- 使用NAS动态存储卷创建有状态应用
- maven 从入门到实战
- Redis的持久化 RDB AOF
- 转载:基于Redis实现分布式锁
- org.gradle.api.tasks.compile.CompileOptions.setBootClasspath
- 语音合成芯片——SYN6658
- redis数据类型命令
- zynq使用lwip远程更新flash
- python argparse bool_python argparse 解析命令行参数
- 一个数组实现两个栈(共享栈)
- 《dota2》地精修补匠tinker路人攻略
- 分支限界法(算法分析与设计)
- java的课程总结报告_java课程总结报告
- 【分享】SDLPAL 仙剑奇侠传开源项目编译
- flyway数据库迁移设置实例
- Redis基本操作命令(图文详解)