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); //.......业务代码 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
2023-05-10 mysql 字段逗号分割行转列操作