惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Y
Y Combinator Blog
博客园 - 叶小钗
GbyAI
GbyAI
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Stack Overflow Blog
Stack Overflow Blog
Jina AI
Jina AI
Microsoft Security Blog
Microsoft Security Blog
T
Tailwind CSS Blog
S
SegmentFault 最新的问题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园 - 聂微东
Google DeepMind News
Google DeepMind News
Martin Fowler
Martin Fowler
有赞技术团队
有赞技术团队
Hugging Face - Blog
Hugging Face - Blog
N
Netflix TechBlog - Medium
B
Blog
MongoDB | Blog
MongoDB | Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
V
V2EX
雷峰网
雷峰网
Apple Machine Learning Research
Apple Machine Learning Research
人人都是产品经理
人人都是产品经理

kissthisrain

悲,OpenCodeGo套餐大砍 Token 用量小组件:适配 DeepSeek Harness 七月杂记 我是如何入住 InStreet 的:一个 AI Agent 的社交初体验 和OpenClaw聊着天,文章就发出去了 OpenClaw使用感受 Google Gemini体验 记笔记本开机不能自动联网的问题 关于我换掉2060S这件事:一些不成熟的显卡选购碎碎念 国庆后的第一个周末 记一次服务器负载过高的问题 职场搬迁新办公地 我的小狗 解决使用OpenVPN导致网络卡顿的问题 DICOM医学影像匿名化导致服务重启的问题 本地运行halo碰到的问题 MongoDB语句(待补充) Java项目启动时间过长的问题 MySQL常用语句记录 windows常用命令记录 私有CI/CD平台搭建(一)Drone安装及部署 Alibaba Cloud Linux release 3安装Docker
Mybatis-Plus使用saveBatch方法不回显ID的问题
kissthisrain · 2024-10-14 · via kissthisrain

背景

公司的动态数据源加密组件升级到1.2.2.RELEASE后,发现Mybatis-Plus的saveBatch方法不能回显id到DO对象中

原因分析

首先表id的生成策略为数据库自增,在这个基础上,debug代码发现,原有的id回显赋值逻辑如下:

  • Jdbc3KeyGenerator下的processBatch中为id回显赋值对应代码

image2024-1-23_14-9-14.png

  • (关键)上面stmt.getGeneratedKeys()实际获取的ResultSet为shardingsphere提供的GeneratedKeysResultSet,此时statements为空导致GeneratedKeysResultSet内部的values为空

image2024-1-23_14-15-18.png

  • 在Jdbc3KeyGenerator类下有如下实现,其中的assign方法为具体的赋值逻辑,此时根据GeneratedKeysResultSet的next为false导致无法进入assign方法

image2024-1-23_14-3-49.png

总结:动态数据源加密组件升级,间接的升级了shardingsphere-jdbc-core-spring-boot-starter的版本到5.1.2,由于该版本重写了statement导致原有的id回显逻辑没有执行

解决方法

由于shardingsphere官方已经表明暂时不会支持此种场景的id回写:https://github.com/apache/shardingsphere/issues/9592

所以只能采用其他方式兼容,目前的解决方式为:

1.去掉DO中关于@tableId的type

2.实现ibatis的Interceptor,拦截执行器为MybatisBatchExecutor的insert方法,在执行前手动赋值雪花算法ID

结尾

版本升级无小事,谨慎谨慎再谨慎呀