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

相关推荐
程序员-周李斌1 分钟前
LinkedList 源码深度分析(基于 JDK 8)
java·开发语言·数据结构·list
西岭千秋雪_1 分钟前
Kafka服务端日志梳理
java·分布式·zookeeper·kafka
v***43177 分钟前
SpringBoot中Get请求和POST请求接收参数详解
java·spring boot·spring
bbq粉刷匠8 分钟前
java刷题-day1
java·开发语言
讓丄帝愛伱12 分钟前
excel导出实例
java·python·excel
p***q7831 分钟前
SpringBoot实战:高效实现API限流策略
java·spring boot·后端
3***161040 分钟前
【JavaEE】Spring Boot 项目创建
java·spring boot·java-ee
6***v41743 分钟前
VScode 开发 Springboot 程序
java·spring boot·后端
t***31651 小时前
SpringBoot中自定义Starter
java·spring boot·后端
橘子编程1 小时前
经典排序算法全解析
java·算法·排序算法