Tdengine实现动态表名

本文介绍了如何在时序数据库中使用自定义MybatisPlus拦截器,通过动态修改表名解决库名相同但结构不同的表查询问题,以及如何配置和使用TaosTableNameHandler实现线程本地的动态表名设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概要

时序数据库中,通过库名分割超级表,所以会出现许多不同库名相同结构的表,因此通过动态修改表名,结合MybatisPlus实现一个实体映射多个结构

自定义Mybatis拦截器

1.实现自定义拦截器
官方的DynamicTableNameInnerInterceptor拦截器只能根据固定的表名实现规则替换,在时序数据库中有许多不同库名表名但是结构相同的表,因此重写DynamicTableNameInnerInterceptor实现自定义拦截
代码如下:

@Data
@NoArgsConstructor
@AllArgsConstructor
public class TaosDynamicTableNameInnerInterceptor implements InnerInterceptor {
   
   

    private TableNameHandler tableNameHandler;

    @Override
    public void beforeQuery(Executor executor, MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) throws SQLException {
   
   
        PluginUtils.MPBoundSql mpBs = PluginUtils.mpBoundSql(boundSql);
        if (InterceptorIgnoreHelper.willIgnoreDynamicTableName(ms.getId())) return;
        mpBs.sql(this.changeTable(mpBs.sql()));
    }

    @Override
    public void beforePrepare(StatementHandler sh, Connection connection, Integer transactionTimeout) {
   
   
        PluginUtils.MPStatementHandler mpSh = PluginUtils.mpStatementHandler(sh);
        MappedStatement ms = mpSh.mappedStatement();
        SqlCommandType sct = ms.getSqlCommandType();
        if (sct == SqlCommandType.INSERT || sct ==<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值