mybatis-plus动态插库

mybatis-plus动态插库(相同的表结构,根据变量特性动态操作表)

适用场景

如果单表的数据压力过大,那么必定需要分表分库进行操作,例如:
1.我们记录系统的日志,日志信息过大,为了减轻数据库单表的压力
我们必定要对其进行分表,可根据月份,业务名进行分表
例如:日志表-1月 ,日志表-2月,日志表3月

具体代码

1.具体工具
@Configuration
@Slf4j
public class MybatisPlusConfig {

@Bean
public PaginationInterceptor paginationInterceptor() {
PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
DynamicTableNameParser dynamicTableNameParser = new DynamicTableNameParser();
dynamicTableNameParser.setTableNameHandlerMap(new HashMap<String, ITableNameHandler>(2) {{
put(“T_DECLARE_POWER_VALUE_GENERAL”, (metaObject, sql, tableName) -> {
// 获取传入参数 year,如果有的话做为后缀,没有的话则使用当前年份作为后缀
Object param = getParamValue(“orgCode”, metaObject);
if(null!=param){
log.info(“电量保存至-》》》”+String.valueOf(param)+“库”);
return tableName + “_” + String.valueOf(param);
}
log.info(“电量保存至-》》》备用库”);
return tableName;
});
}});
paginationInterceptor.setSqlParserList(Collections.singletonList(dynamicTableNameParser));
return paginationInterceptor;
}

/**
* 获取参数值
*/
private Object getParamValue(String title, MetaObject metaObject){
//获取参数
Object originalObject = metaObject.getOriginalObject();
JSONObject originalObjectJSON = JSON.parseObject(JSON.toJSONString(originalObject));
JSONObject boundSql = originalObjectJSON.getJSONObject(“boundSql”);
try {
JSONObject parameterObject = boundSql.getJSONObject(“parameterObject”);
return parameterObject.get(title);
}catch (Exception e) {
return null;
}
}

逻辑步骤:
拦截执行的sql,获取标注的入参,如果当前执行的sql中包含这个参数则
走不通的表进行操作(增删改查)
2.具体代码:以组织信息作为拦截条件,进入不同组织表(表结构一致)
在这里插入图片描述3.具体表名
表名:原表名_orgCode1,原表名_orgCode2,原表名_orgCode3

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值