文章目录
概要
时序数据库中,通过库名分割超级表,所以会出现许多不同库名相同结构的表,因此通过动态修改表名,结合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 ==<