十四、【源码】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后的索引值,否则使用的是两个数据库连接,因为数据库隔离级别的原因,获取不到另一个连接中未提交的数据

相关推荐
心流时间13 分钟前
[Java基础] JVM常量池介绍(BeanUtils.copyProperties(source, target)中的属性值引用的是同一个对象吗)
java·开发语言·jvm
瑞金彭于晏30 分钟前
通俗易懂版 Maven 科普,maven是什么?
java·maven
好看资源平台34 分钟前
Java Web开发实战与项目——Spring Boot与Spring Cloud微服务项目实战
java
.猫的树40 分钟前
Java集合List快速实现重复判断的10种方法深度解析
java·开发语言·list·集合
littlegirll1 小时前
命令行方式安装KFS同步KES到KADB
java·大数据·数据库
itachi-uchiha1 小时前
深入理解 Linux 中的 last 和 lastb 命令
java·linux·服务器
xiaoyustudiowww1 小时前
JSP + Servlet 实现 AJAX(纯JS版)
java·javascript·servlet
计算机毕设定制辅导-无忧学长1 小时前
Maven 插件的使用(一)
java·python·maven
一只_程序媛1 小时前
【leetcode hot 100 42】接雨水
java·算法·leetcode
代码小白%1 小时前
快速理解Spring 和 Spring Boot 的核心区别
java·spring boot·spring