当前位置: 首页 > news >正文

SpringBoot框架,不同环境中实体类对应不同的表

一、背景

        因项目要求,用户方的操作系统是麒麟系统,数据库是人大金仓;开发环境是Windows系统,但是有的开发机装不上人大金仓,只好用MySQL代替。这就出现了一个问题,人大金仓建的数据库,下一级不是数据表,而是模式,写查询语句引用表时就跟MySQL不同。

        项目用到了MyBatisPlus,实体类加上注解“@TableName”,即可将该实体体的属性与数据表字段做映射。人大金仓的表名前要加模式名称,MySQL则没有,不能打包的时候改这个表名吧?这就要求项目运行或打包时根据当前环境(Profile)使用不同的表。

二、解决方案

        MyBatis的注解“@Table”本可以从profile的yml文本中加载指定的表名,但由于系统依赖了MyBatisPlus,导致注解“@Table”失效,而且强制使用了注解“@TableName”中的表名,于是改用MybatisPlus的拦截器实现。

1、定义表名

        根据环境将表名在application-xxx.yml中申明即可。

2、修改实体类

        删除实体类中的注解“@TableName”,框架会直接将实体类名称做为表名使用,在拦截器中拦截并修改即可。

3、定义拦截器

@Configuration
public class MybatisPlusConfig {@Value("${xx.xx.xx}")private String tableNameXX;@Beanpublic MybatisPlusInterceptor myBatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();{// 动态表名DynamicTableNameInnerInterceptor dynamicInterceptor = new DynamicTableNameInnerInterceptor();dynamicInterceptor.setTableNameHandler((sql, tableName) -> {// xxxx为实体类名,映射到tableNameXXif (tableName.equalsIgnoreCase("xxxx")) {return tableNameXX;}return tableName;});interceptor.addInnerInterceptor(dynamicInterceptor);}return interceptor;}
}

http://www.dtcms.com/a/296643.html

相关文章:

  • MySQL workbench的使用
  • Django 科普介绍:从入门到了解其核心魅力
  • 【Python】Python多线程爬虫实战:从基础原理到分布式架构实现
  • RCLAMP0512TQTCT 升特半导体 TVS二极管 12通道全防护芯片 以太网/PLC控制/5G基站专用
  • UE5中如何解决角色网格体“掉下去”的问题
  • 高并发系统设计面试题
  • 高效互联,ModbusTCP转EtherCAT网关赋能新能源电缆智能制造
  • Apache 消息队列分布式架构与原理
  • 六种经典智能优化算法(PSO/GWO/WOA/HHO/DBO/SSA)无人机(UAV)三维路径规划,Matlab代码实现
  • 【三桥君】大语言模型计算成本高,MoE如何有效降低成本?
  • Java学习---Spring及其衍生(下)
  • Oracle 时间处理函数和操作符笔记
  • 数据库常用DDL语言
  • 洛谷 P1996 约瑟夫问题之题解
  • LLM针对隐藏层的特征增强的相关论文
  • Python生成折线图
  • 7.24 C/C++蓝桥杯 | 排序算法
  • 外企本土化布局对国内连接器企业影响几何?
  • 排序初识(上)-- 讲解超详细
  • 【接口自动化】-1- 初识接口
  • VUE的学习
  • shell编程
  • 加密算法-----BCrypt
  • C语言第四章函数
  • Java八大基本类型
  • ICCV 2025 | CWNet: Causal Wavelet Network for Low-Light Image Enhancement
  • 视频剪辑软件使用到的技术栈详解
  • 教育培训系统源码技术拆解:前后端分离、企业培训课程推送机制全解析
  • act_hi_taskinst表历史任务记录不同步,无数据
  • LeetCode 刷题【12. 整数转罗马数字】