问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

MyBatisPlus动态表名查询方案(利用MySQL视图实现)

创作时间:
作者:
@小白创作中心

MyBatisPlus动态表名查询方案(利用MySQL视图实现)

引用
1
来源
1.
https://mysql360.com/2024/10/03/zongjie/2390/

在使用MyBatisPlus进行数据库操作时,有时会遇到需要根据规则查询不同月份表的情况。例如,表名可能以table_name_2024_05的形式存在。为了解决这一问题,本文介绍了一种通过创建和动态重建MySQL视图来实现动态表名查询的方案。

解决方案概述

  1. 创建视图:在数据库中创建一个视图table_name_v,它对应于一个基础表table_name,因为所有相关表结构相同。

  2. 动态重建视图:在查询前,根据业务需求动态重建视图,使其指向正确的表。

代码实现

实体类示例

@TableName("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);
}

服务层代码

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

通过这种方式,可以避免复杂的配置,实现MyBatisPlus中实体对应的表名动态变化。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号