-
Notifications
You must be signed in to change notification settings - Fork 4.4k
支持根据参数化查询中的sql的value决定表名替换逻辑(根据value值分表) #6898
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: 3.0
Are you sure you want to change the base?
Conversation
…定TableNameHandler的方案,TableNameHandlerFactory创建的TableNameHandler可以捕捉BoundSql中的query的参数作为上下文,使参数化查询的sql中的value可以作为动态分表的判断条件
|
你为什么不去用shardingjdbc |
我也想把这事丢给sharding处理的..但是基线要求springboot升级到3.x然后国产化需求对接的是达梦,这一套下来sharding不兼容达梦,改不动,和达梦提了问题,不知道啥时候能做兼容......只好在这里自己动手改了.......可怜可怜被组件折磨的孩子,收留这个pr吧 |
|
sharding5和spring版本又没关系,你有试过让sharding把达梦识别为mysql吗? |
|
达梦不是抄的mysql吗?那是抄的pg? |
|
对不起....他抄的oracle的.... |
|
他也支持Oracle啊,你试过吗?sharding5.5也不需要spring-starter啊,按他文档给的java api自己构建他的datasource那一套注入到spring里,根本不需要在什么配置文件里写规则 |
|
恩,我试一试吧,原先的集成后,对接后端数据源是根据jdbc连接字符串的协议自动生成的,遇到不支持我就放弃了,我注入强制切换试一下吧 |
|
org.apache.shardingsphere.infra.database.DatabaseTypeEngine |
|
emm,没事了.....好像达梦要全大写的逻辑表名....分表规则逻辑表名用全大写可以了.....具体我再试试 |
emm,已经使用sharding处理掉了,你看下这个pr有合并的价值么,没有的话直接关掉就好(个人觉得还是合理的扩展的撒 |




需求: 多租户平台,业务中针对部分业务表的分表需要根据sql中的orgid字段的值进行表替换
实现:
在DynamicTableNameInnerInterceptor中
使用TableNameHandlerFactory替换直接使用TableNameHandler
TableNameHandlerFactory创建TableNameHandler的时候可以捕获MPBoundSql中的parameterObject
,也可以在TableNameHandlerFactory的实现中使用单例TableNameHandler实现和现在一样的静态TableNameHandler效果
所以将DynamicTableNameInnerInterceptor中的tableNameHandler标注为Deprecated,但是依旧保留并且在执行阶段做了兼容