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

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

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

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

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

 

实体代码:

1
2
3
4
5
6
7
8
9
@TableName(value = "table_name_v")
public class TableNameV extends BaseEntity {
    private static final long serialVersionUID = 1L;
 
    
    @TableId
    private Integer id;
    
    private String Name;

 

mapper代码(关键)

1
2
3
4
5
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代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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);
         
        //.......业务代码

 

   

  

 

posted @   万笑佛  阅读(670)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
历史上的今天:
2023-05-10 mysql 字段逗号分割行转列操作
点击右上角即可分享
微信分享提示