mybatisplus 中查询的实体对应的表名是动态的解决方案

  开发中遇到需要查询一些表里的数据,这些数据按照一定的规则存放在不同的数据库表里,例如表名是table_name+月份 table_name_2024_05,table_name_2024_04这样,这些表的结构都相同。

网上找了一些动态修改实体对应数据库表名的方法,操作相对复杂而且跟mybatisplus的版本有关。自己想出一个相对简单的解决方案,思路如下:

1、数据库里创建一个视图table_name_v 对应表table_name(那一批表的结构都一样对应哪一个都可以)

2、在查询数据之前重新建立视图,修改视图对应的表。这样就完成了视图不变,但是查询的内容是根据业务需求对应的表里的数据。

实体代码:

复制代码
@TableName(value = "table_name_v")
public class TableNameV extends BaseEntity {
    private static final long serialVersionUID = 1L;

   
    @TableId
    private Integer id;
   
    private String Name;

mapper代码(关键)

复制代码
public interface TableNameVMapper extends BaseMapper<TableNameV> {

    @Select(" create or replace view table_name_v as    " +
            "   select   id,  name  from  ${tableName}"    )
    void createView(String tableName);	

server代码

复制代码
public class TableNameVServiceImpl implements ITableNameVService {	

    @Autowired
    TableNameVMapper tableNameVMapper;
	
    @Override
    public Map selectList(TableNameV tableNameV) {
         
        id = "2024_05";
        String tableName = "table_name_"+id;
        //动态创建视图 指向对应的分表
        tableNameVMapper.createView(tableName);	
		
		//.......业务代码

  

相关推荐
周航宇JoeZhou1 分钟前
JB3-9-SpringAI(二)
java·ai·agent·多智能体·调度·智能体·观察
好家伙VCC4 分钟前
Web Components主题热切换方案揭秘
java·前端
慕木沐12 分钟前
Google ADK Java 1.0版本 核心机制与实战 Demo
java·开发语言·python
焦虑的说说1 小时前
秒杀系统设计方案
java
许彰午1 小时前
30_Java Stream流操作全解
java·windows·python
qq_2518364572 小时前
基于java Web网络订餐系统设计与实现 源码文档
java·开发语言·前端
凡人叶枫2 小时前
Effective C++ 条款17:以独立语句将 newed 对象置入智能指针
java·linux·开发语言·c++·算法
飞天狗1112 小时前
零基础JavaWeb入门——第2课:让网页“活”起来 —— JSP是什么?
java·开发语言·前端·后端·web
梦@_@境3 小时前
面向 Spring Boot 的可观测业务流程编排引擎
java·spring boot·后端
云烟成雨TD3 小时前
Spring AI Alibaba 1.x 系列【77】执行取消
java·人工智能·spring