mybatisplus-动态表名SQL解析器(分库分表查询)

当数据量特别大的时候,我们通常会采用分库分表。这时,可能就会有多张表,其表结构相同,但表名不同。例如order_1,order_2,order_3,查询时,我们可能需要动态设置要查的表名。mp提供了动态表名SQL解析器,示例如下:
先在mysql中拷贝一下user2表

在这里插入图片描述

配置动态表名拦截器

package com.example.mp.config;  
  
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;  
import com.baomidou.mybatisplus.extension.plugins.handler.TableNameHandler;  
import com.baomidou.mybatisplus.extension.plugins.inner.DynamicTableNameInnerInterceptor;  
import org.springframework.context.annotation.Bean;  
import org.springframework.context.annotation.Configuration;  
import java.util.HashMap;  
import java.util.Random;  
  
@Configuration  
public class MybatisPlusConfig {  
  
 @Bean  
 public MybatisPlusInterceptor mybatisPlusInterceptor() {  
  MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();  
  DynamicTableNameInnerInterceptor dynamicTableNameInnerInterceptor = new DynamicTableNameInnerInterceptor();  
  HashMap<String, TableNameHandler> map = new HashMap<>();  
        // 对于user2表,进行动态表名设置  
  map.put("user2", (sql, tableName) -> {  
   String _ = "_";  
   int random = new Random().nextInt(2) + 1;  
   return tableName + _ + random; // 若返回null, 则不会进行动态表名替换, 还是会使用user2  
  });  
  dynamicTableNameInnerInterceptor.setTableNameHandlerMap(map);  
  interceptor.addInnerInterceptor(dynamicTableNameInnerInterceptor);  
  return interceptor;  
 }  
  
}

测试

@Test  
public void testDynamicTable() {  
	user2Mapper.selectList(null);  
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LC超人在良家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值