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

推荐订阅源

爱范儿
爱范儿
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
WordPress大学
WordPress大学
Apple Machine Learning Research
Apple Machine Learning Research
小众软件
小众软件
雷峰网
雷峰网
博客园 - 聂微东
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 三生石上(FineUI控件)
博客园_首页
博客园 - 司徒正美
博客园 - 叶小钗
IT之家
IT之家
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Hugging Face - Blog
Hugging Face - Blog
Last Week in AI
Last Week in AI
博客园 - 【当耐特】
宝玉的分享
宝玉的分享
有赞技术团队
有赞技术团队
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
T
Tailwind CSS Blog
V
V2EX
The Cloudflare Blog

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

结尾

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