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

  

相关推荐
SamDeepThinking3 小时前
从源码到代码:MyBatis-Flex 与 MyBatis-Plus 的逐项对比
java·后端·程序员
她的男孩6 小时前
Spring Boot 接 Flowable 工作流:用 3 个注解搭一个请假审批流程
java·后端·架构
荣码8 小时前
LLM结构化输出:让AI返回JSON而不是废话,我踩了4个坑
java·python
plainGeekDev10 小时前
Gson → kotlinx.serialization
android·java·kotlin
小bo波18 小时前
Java Swing 图形用户界面实验 —— 从算术练习到游戏开发的完整实践
java·课程设计·gui·游戏开发·扫雷·swing
咖啡八杯20 小时前
GoF设计模式——备忘录模式
java·后端·spring·设计模式
SamDeepThinking1 天前
裁掉那个差程序员后,给你看团队里高手的代码:这个习惯,希望你有
java·后端·程序员
朕瞧着你甚好1 天前
技术雷达 & Java 集成评估报告 — Apache Tika 3.3.1
java·ai编程