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

相关推荐
nanxun88616 小时前
记一次诡异的 Docker 容器"串包"故障排查
java
用户15630681035118 小时前
Day01 | Java 基础(Java SE)
java
行者全栈架构师20 小时前
Maven dependency:tree 的 8 个高级用法
java·后端
行者全栈架构师1 天前
IDEA 中 Maven 项目的 15 个红色报错快速解决方法
java·后端
令人头秃的代码0_01 天前
mac(m5)平台编译openjdk
java
唐青枫2 天前
Java JDBC 实战指南:从 Connection 到事务和连接池
java
一个做软件开发的牛马2 天前
MyBatis-Plus 从零实战:完整搭建可运行 Demo,BaseMapper 零 SQL、Wrapper 条件构造、分页插件与代码生成器详解
java·后端
用户3721574261352 天前
Java 处理 PDF 图片:提取 PDF 中的图片,并压缩 PDF 图片体积
java
用户3721574261352 天前
Java 打印 Word 文档:从基础打印到高级设置
java
用户3521802454753 天前
当 Prompt 学会"热更新":Spring Boot × Nacos3 AI 实战
java·spring boot·ai编程