支持根据参数化查询中的sql的value决定表名替换逻辑(根据value值分表)#6898
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,但是依旧保留并且在执行阶段做了兼容