在MyBatisPlus中,有时需要根据规则查询不同月份的表,如table_name_2024_05
。为了实现动态查询,可采用以下简化方案:
- 创建视图:在数据库中创建一个视图
table_name_v
,它对应于一个基础表table_name
,因为所有相关表结构相同。 - 动态重建视图:在查询前,根据业务需求动态重建视图,使其指向正确的表。
实体类示例:
@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中实体对应的表名动态变化。