iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >mybatis-plus动态表名的实现示例
  • 276
分享到

mybatis-plus动态表名的实现示例

2024-04-02 19:04:59 276人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

背景 在分表的背景下,有时候查询数据的时候需要跨表查询,那此时就需要MP在解析的时候,能够很好的自适应表格名称 实现 MP中是通过PaginationInterceptor(分页插件

背景

在分表的背景下,有时候查询数据的时候需要跨表查询,那此时就需要MP在解析的时候,能够很好的自适应表格名称

实现

MP中是通过PaginationInterceptor(分页插件)完成动态表名解析的,配置如下:

数据库中表

依赖


<dependency>
 <groupId>com.baomidou</groupId>
 <artifactId>mybatis-plus-boot-starter</artifactId>
 <version>3.3.1.tmp</version>
</dependency>

配置类


package com.huanchuang.common.config;
 
import com.baomidou.mybatisplus.extension.parsers.DynamicTableNameParser;
import com.baomidou.mybatisplus.extension.parsers.ITableNameHandler;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.extension.plugins.pagination.optimize.JsqlParserCountOptimize;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
 
import java.util.Collections;
import java.util.HashMap;
 

@Configuration
@MapperScan("com.huanchuang.ext.mapper**")
@ConditionalOnProperty(prefix = "spring.config", name = "enableMybatisPlusDynamicTable", havingValue = "true")
public class MybatisPlusDynamicTableConfig {
 
 private static final String DYNAMIC_TABLE_PRE = "common_user";
 
 
 @Bean
 public PaginationInterceptor paginationInterceptor() {
  PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
  // 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求 默认false
  paginationInterceptor.setOverflow(false);
  // 设置最大单页限制数量,默认 500 条,-1 不受限制
  paginationInterceptor.setLimit(500);
//  // 开启 count 的 join 优化,只针对部分 left join
  paginationInterceptor.setCountSqlParser(new jsqlParserCountOptimize(true));
  DynamicTableNameParser dynamicTableNameParser = new DynamicTableNameParser();
  dynamicTableNameParser.setTableNameHandlerMap(new HashMap<String, ITableNameHandler>(2) {{
   //动态表规则-生成自己需要的动态表名
   put(DYNAMIC_TABLE_PRE, (metaObject, sql, tableName) -> DynamicTableTreadLocal.INSTANCE.getTableName());
  }});
  paginationInterceptor.setSqlParserList(Collections.singletonList(dynamicTableNameParser));
  return paginationInterceptor;
 }
}

动态表名存储类


package com.huanchuang.common.config;
 

public enum DynamicTableTreadLocal {
 INSTANCE;
 private ThreadLocal<String> tableName = new ThreadLocal<>();
 
 public String getTableName() {
  return tableName.get();
 }
 
 public void setTableName(String tableName) {
  this.tableName.set(tableName);
 }
 
 public void remove() {
  tableName.remove();
 }
 
}

使用


 private void select(int year) {
 
   DynamicTableTreadLocal.INSTANCE.setTableName("user_" + year);
   LambdaQueryWrapper<sparkDownSample> wrapper = Wrappers.lambdaQuery(User.class);
   List<User> userList = userMapper.list(wrapper )
 
 }

@Data
public class User {
 
 private Long id;
 
 private String userName;
 
 private String address;
 
 private char sex;
 
 private Byte age;
 
}

原理

以mybatis的query方法作为入口通过动态代理执行到配置的分页插件通过分页插件进行sql解析根据分页插件中配置的tableNameHandler进行目标表格的替换最后形成一个可执行sql,执行查询

到此这篇关于mybatis-plus动态表名的实现示例的文章就介绍到这了,更多相关mybatis-plus 动态表名内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: mybatis-plus动态表名的实现示例

本文链接: https://www.lsjlt.com/news/122870.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • mybatis-plus动态表名的实现示例
    背景 在分表的背景下,有时候查询数据的时候需要跨表查询,那此时就需要MP在解析的时候,能够很好的自适应表格名称 实现 MP中是通过PaginationInterceptor(分页插件...
    99+
    2022-11-12
  • mybatis-plus动态表名实现方法
    目录1.使用场景2.一定要时常注意工具的更新,不吃亏3.对mybatis-plus进行升级4.将原来的mybatis的插件配置调整成新版本的,并添加上动态表名的模块5.运行一下6. ...
    99+
    2022-11-13
  • mybatis plus怎么实现动态表名
    Mybatis Plus 可以通过使用 TableNameParser 接口来实现动态表名。你需要自定义一个实现了 TableNameParser 接口的类,并在 Mybatis Plus 的配置中将其注册为自定义的 TableNamePa...
    99+
    2023-09-03
    mybatis java mysql 开发语言 数据库
  • MyBatis-Plus动态表名的使用
    目录MyBatis-Plus版本MyBatis-Plus配置请求参数传递辅助类使用MyBatis-Plus实现动态表名 MyBatis实现方法如下现在要用MyBatis-Plus 实...
    99+
    2023-05-14
    mybatis-plus动态表名
  • MyBatis-Plus动态表名如何使用
    本篇内容介绍了“MyBatis-Plus动态表名如何使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!MyBatis-Plus实现动态表名M...
    99+
    2023-07-05
  • MyBatis-Plus集成动态多数据源的实现示例
    这里使用的是dynamic-datasource-spring-boot-starter ,它是一个基于springboot的快速集成多数据源的启动器。 1.首先在pom文件引入dy...
    99+
    2022-11-13
  • MyBatis-Plus动态返回实体类示例详解
    目录1. 自定义SqlSession2. 自定义SqlSessionFactory3. 自定义SqlSessionTemplate4. 自定义基础Mapper5. 使用1. 自定义S...
    99+
    2022-11-13
  • mybatis水平分表实现动态表名的项目实例
    目录一、水平分表二、项目实现目录结构三、扩展一、水平分表 当业务需求的数据量过大时,一个表格存储数据会非常之多,故时长采用水平分表的方式来减少每张表的数据量即是提升查询数据库时的效率...
    99+
    2022-11-13
  • SQL数据分表Mybatis Plus动态表名优方案
    目录一、应用场景二、动态表名处理器接口实现三、测试实现效果一、应用场景 大家在使用MyBATis进行开发的时候,经常会遇到一种情况:按照月份month将数据放在不同的表里面,查询数据的时候需要跟不同的月份month去查询...
    99+
    2022-08-12
    SQL数据分表Mybatis Plus Mybatis Plus动态表名优化方案
  • Mybatis中xml的动态sql实现示例
    目录动态SQL简介一、#{}与${}区别#{}表示一个占位符,使用占位符可以防止sql注入,二、传递包装类型三、动态sql—类型四、动态sql—详解(一)if...
    99+
    2022-11-13
  • Mybatis-Plus实现SQL拦截器的示例
    目录起源实现拦截器接口InnerInterceptor修改sql常用的工具类起源 最近公司要做多租户,Mybatis-Plus的多租户插件很好用,但是有一个场景是:字典表或者某些数据...
    99+
    2023-05-19
    Mybatis-Plus SQL拦截器 Mybatis-Plus 拦截器
  • MyBatis-Plus 分页查询的实现示例
    方法: 使用selectPage()方法,第一个参数是传入分页方法(传入当前页和当前显示多少条数据),第二个参数是传入查询条件(如果查询全部的话,可以传null)。 前提: 表中的...
    99+
    2022-11-13
  • MyBatis-Plus实现字段自动填充功能的示例
    目录一、前言二、实现1. 实体类2. 公用字段 - 使用注解填充字段3. 自定义MyMetaObjectHandler字段自动填充处理类继承MetaObjectHandler一、前言...
    99+
    2022-11-12
  • MyBatis动态SQL的示例
    这篇文章将为大家详细讲解有关MyBatis动态SQL的示例,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。动态 SQLMyBatis 的强大特性之一便是它的动态 SQL。如...
    99+
    2022-10-18
  • Mybatis-plus支持Gbase8s分页的实现示例
    目录需求实现方法法2实现20210423修改完善20210519完善20210528完善需求 实现mybatis-plus对gbase8s的分页效果支持,使切换数据库(如oracle...
    99+
    2022-11-12
  • MyBatis-Plus实现连表查询的方法实例
    目录使用方法安装使用核心类MPJLambdaWrapper和MPJQueryWrapperMPJLambdaWrapper用法MPJQueryWrapper总结mybatis-plu...
    99+
    2022-11-13
  • springboot+mybatis-plus基于拦截器实现分表的示例代码
    目录前言一、设计思路二、实现思路三、代码实现接口描述核心组成部分1.本地线程工具类2.注解部分3.拦截器实现四、测试后记前言 最近在工作遇到数据量比较多的情况,单表压力比较大,cru...
    99+
    2022-11-12
  • MyBatis-Plus多表联查的实现方法(动态查询和静态查询)
    目录建库建表依赖配置代码测试1.静态查询2.动态查询 1.不传条件2.传条件建库建表 DROP DATABASE IF EXISTS mp; CREATE DATA...
    99+
    2022-11-13
  • MyBatis-Plus多表联查(动态查询)的项目实践
    目录简介代码建库建表配置依赖测试1.静态查询2.动态查询简介 本文用示例介绍使用MyBatis-Plus进行多表查询的方法,包括静态查询和动态查询。 代码 controller pa...
    99+
    2022-11-13
    MyBatis-Plus多表联查 MyBatis-Plus多表动态查询
  • Mybatis Plus 实现批量插入的示例代码
    目录一. 添加依赖二. 继承默认方法注入三. 在 MybatisPlusConfig 配置文件中注入 Bean四. 扩展自带 BaseMapper五. 业务层面实现Mybatis P...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作