十四、【源码】SelectKey返回Insert操作自增索引值

源码地址:https://github.com/mybatis/mybatis-3/

仓库地址:https://gitcode.net/qq_42665745/mybatis/-/tree/14-selectKey

返回Insert操作自增索引值

分为两部分,解析初始化和使用

拿含有selectkey标签的insert语句解析来说

1.解析部分

  • 解析时看有没有selectkey标签,有的话先解析selectkey的内容,包括对其SQL的解析并封装成一个MappedStatement和创建KeyGenerator放入configuration中
  • 解析insert语句,然后从configuration取出KeyGenerator和语句一起封装成MappedStatement,这里的KeyGenerator是实现这个功能的重点

2.使用部分

  • 正常执行完insert语句
  • 执行完不返回,会取出KeyGenerator执行processGeneratedKeys方法,如果解析的时候有selectkey标签,这里判断能通过就能执行selectkey里面的语句,然后结果通过反射注入到参数中,结果中就能取到

细节点:这两个sql是在同一个线程中,执行第一个insert时已经获取了数据库连接,再执行select时,获取连接的代码加一个是否存在判断,如果已存在就直接返回已存在的数据库连接,这样就能让两个sql在同一个数据库连接中执行了,才能获取到insert后的索引值,否则使用的是两个数据库连接,因为数据库隔离级别的原因,获取不到另一个连接中未提交的数据

相关推荐
考虑考虑6 小时前
JDK26的JEP 500属性
java·后端·java ee
LMT流氓兔6 小时前
第五单元——第十二课:把脚本整理成项目
java·数据库·python·langchain·1024程序员节
yuniko-n6 小时前
【JUC】四种内存屏障示例
java·1024程序员节
念何架构之路7 小时前
Go reflect 包:结构体反射 —Field、Tag 与 VisibleFields
java·数据库·golang
liangbo78 小时前
03-JDK 10/11 局部变量推断与 LTS:var 到底该怎么用
java
Percep_gan8 小时前
调用天翼云的对象存储ZOS,很详细
java·1024程序员节
若亦_9 小时前
数据结构>>优先级队列(堆)
java·数据结构
Wang's Blog9 小时前
Java 项目实战: 交友项目 - 查询圈子个人动态:查询我的动态需求分析
java·开发语言·交友
denlaku9 小时前
JDK 23 新特性详解
java
code2cat9 小时前
Java高级篇之Hibernate:让对象映射到表,理解持久化与事务
java·后端·hibernate·1024程序员节