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);	
		
		//.......业务代码

  

相关推荐
大模型码小白4 小时前
企业级检索增强后端集成:Java 服务如何管理知识库版本
java·服务器·开发语言·人工智能·python·microsoft
AI多Agent协作实战派5 小时前
AI多Agent协作系统实战(二十二):从6列到12列——任务监控报告的进化之路
java·人工智能·uni-app·bug
千桐科技5 小时前
DataX 执行引擎正式加入:qData 开源版 v1.6.0 新增 Quartz + DataX 轻量运行模式!
java·大数据·开源·数据治理·数据中台·qdata
Irene19915 小时前
Oracle PL/SQL Developer 版本差异(11g、14)实战总结
java·开发语言
AI人工智能+电脑小能手5 小时前
【大白话说Java面试题 第191题】【08_Kafka篇】第7题:消息队列的优缺点
java·消息队列·系统设计·分布式架构·技术选型
用户446139430275 小时前
Spring Boot 接入大模型:从配置到实战的完整指南
java
青石路5 小时前
如果写Redis序列化与读Redis序列化不一致,你觉得会发生什么
java·redis
煎饼学大模型5 小时前
架构决定上限:Skill 知识架构的三次重构实践
java·重构·架构·skill
llwszx5 小时前
【Java/Go后端手撸原生Agent(第五篇):多工具并行调用 + BashTool执行引擎 + Judge证据链升级】
java·后端·golang·状态机·pydantic·agnet·llm-as-judge
奈何不吃鱼5 小时前
【SpringBoot】业务多线程四大实战场景
java·spring boot·多线程