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

mybatisplus code generator columnNaming 不起作用

mybatisplus code generator 版本 3.5.1

设置 columnNaming(NamingStrategy.no_change) 无效,发布原码有 bug

原码:

/** Copyright (c) 2011-2021, baomidou (jobob@qq.com).* <p>* Licensed under the Apache License, Version 2.0 (the "License"); you may not* use this file except in compliance with the License. You may obtain a copy of* the License at* <p>* https://www.apache.org/licenses/LICENSE-2.0* <p>* Unless required by applicable law or agreed to in writing, software* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the* License for the specific language governing permissions and limitations under* the License.*/
package com.baomidou.mybatisplus.generator.config;import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.generator.config.po.TableField;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import org.jetbrains.annotations.NotNull;import java.util.Set;/*** 名称转换接口类** @author hubin* @since 2017-01-20*/
public interface INameConvert {/*** 执行实体名称转换** @param tableInfo 表信息对象* @return*/@NotNullString entityNameConvert(@NotNull TableInfo tableInfo);/*** 执行属性名称转换** @param field 表字段对象,如果属性表字段命名不一致注意 convert 属性的设置* @return*/@NotNullString propertyNameConvert(@NotNull TableField field);/*** 默认名称转换接口类** @author nieqiurong 2020/9/20.* @since 3.5.0*/class DefaultNameConvert implements INameConvert {private final StrategyConfig strategyConfig;public DefaultNameConvert(StrategyConfig strategyConfig) {this.strategyConfig = strategyConfig;}@Overridepublic @NotNull String entityNameConvert(@NotNull TableInfo tableInfo) {return NamingStrategy.capitalFirst(processName(tableInfo.getName(), strategyConfig.entity().getNaming(), strategyConfig.getTablePrefix(), strategyConfig.getTableSuffix()));}@Overridepublic @NotNull String propertyNameConvert(@NotNull TableField field) {return processName(field.getName(), strategyConfig.entity().getNaming(), strategyConfig.getFieldPrefix(), strategyConfig.getFieldSuffix());}private String processName(String name, NamingStrategy strategy, Set<String> prefix, Set<String> suffix) {String propertyName = name;// 删除前缀if (prefix.size() > 0) {propertyName = NamingStrategy.removePrefix(propertyName, prefix);}// 删除后缀if (suffix.size() > 0) {propertyName = NamingStrategy.removeSuffix(propertyName, suffix);}if (StringUtils.isBlank(propertyName)) {throw new RuntimeException(String.format("%s 的名称转换结果为空,请检查是否配置问题", name));}// 下划线转驼峰if (NamingStrategy.underline_to_camel.equals(strategy)) {return NamingStrategy.underlineToCamel(propertyName);}return propertyName;}}
}

bug:

 @Overridepublic @NotNull String propertyNameConvert(@NotNull TableField field) {return processName(field.getName(), strategyConfig.entity().getNaming(), strategyConfig.getFieldPrefix(), strategyConfig.getFieldSuffix());}

重写自己的类:


/*** 名称转换器,* 此类的目的是修改字段名不能原样输出的 bug。* @author wuYaFang* @date 2024/9/27 21:47*/
public class HmcNameConvert extends INameConvert.DefaultNameConvert {private final StrategyConfig strategyConfig;public HmcNameConvert(StrategyConfig strategyConfig) {super(strategyConfig);this.strategyConfig = strategyConfig;}@Overridepublic String propertyNameConvert(@NotNull TableField field) {// 修改 bugreturn processName(field.getName(), strategyConfig.entity().getColumnNaming(), strategyConfig.getFieldPrefix(), strategyConfig.getFieldSuffix());}private String processName(String name, NamingStrategy strategy, Set<String> prefix, Set<String> suffix) {String propertyName = name;// 删除前缀if (prefix.size() > 0) {propertyName = NamingStrategy.removePrefix(propertyName, prefix);}// 删除后缀if (suffix.size() > 0) {propertyName = NamingStrategy.removeSuffix(propertyName, suffix);}if (StringUtils.isBlank(propertyName)) {throw new RuntimeException(String.format("%s 的名称转换结果为空,请检查是否配置问题", name));}// 下划线转驼峰if (NamingStrategy.underline_to_camel.equals(strategy)) {return NamingStrategy.underlineToCamel(propertyName);}return propertyName;}}

配置:

                .strategyConfig(builder -> {builder.addInclude("insurance_order")
//                            .addTablePrefix("insurance_") // 表前缀.entityBuilder().columnNaming(NamingStrategy.no_change).nameConvert(new HmcNameConvert(builder.build())) // 设置自定义的字段名称转换器.addTableFills(new Column("create_time", FieldFill.INSERT),new Column("update_time", FieldFill.INSERT_UPDATE),new Column("create_user_id", FieldFill.INSERT),new Column("create_user_name", FieldFill.INSERT),new Column("update_user_id", FieldFill.INSERT_UPDATE),new Column("update_user_name", FieldFill.INSERT_UPDATE)).versionColumnName("version").logicDeleteColumnName("del_flag").enableTableFieldAnnotation().enableLombok().mapperBuilder().enableMapperAnnotation().controllerBuilder().enableRestStyle(); // 设置过滤表前缀})

解决问题了。

相关文章:

  • 打靶记录18——narak
  • 基于冲突动态监测算法的健身房预约管理系统
  • k8s 部署ETCD ,并且使用.net core 连接获取配置
  • linux-CMake
  • MySQL进阶:深入理解数据约束与优化查询
  • Linux增加一个回收站功能(实用功能)
  • 算法复杂度之时间复杂度
  • PMA TB40-1 限温器Temperature limiter TB 40-1 手测
  • SpringBoot整合JPA实现CRUD详解
  • 【珠海一号卫星】
  • 鼎阳加油-IOC关键技术问题的解决记
  • 柯桥韩语学校|韩语每日一词打卡:회갑연[회가변]【名词】花甲宴
  • 怎么通过AI大模型开发一个网站?
  • 计算机网络回顾
  • 【WRF运行第三期】服务器上运行WRF模型(官网案例-Hurricane Matthew)
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • JavaScript类型识别
  • JavaScript设计模式系列一:工厂模式
  • MD5加密原理解析及OC版原理实现
  • Netty 4.1 源代码学习:线程模型
  • springMvc学习笔记(2)
  • uni-app项目数字滚动
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • 从输入URL到页面加载发生了什么
  • 复习Javascript专题(四):js中的深浅拷贝
  • 日剧·日综资源集合(建议收藏)
  • 如何用vue打造一个移动端音乐播放器
  • 什么软件可以剪辑音乐?
  • 小程序button引导用户授权
  • 一道闭包题引发的思考
  • 用Visual Studio开发以太坊智能合约
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • 进程与线程(三)——进程/线程间通信
  • 正则表达式-基础知识Review
  • ​1:1公有云能力整体输出,腾讯云“七剑”下云端
  • #if等命令的学习
  • #如何使用 Qt 5.6 在 Android 上启用 NFC
  • (1)STL算法之遍历容器
  • (Ruby)Ubuntu12.04安装Rails环境
  • (八)Flink Join 连接
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (三分钟)速览传统边缘检测算子
  • (四)stm32之通信协议
  • (转载)CentOS查看系统信息|CentOS查看命令
  • **CI中自动类加载的用法总结
  • .apk文件,IIS不支持下载解决
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .Net Redis的秒杀Dome和异步执行
  • .Net 基于MiniExcel的导入功能接口示例
  • .NET/C# 避免调试器不小心提前计算本应延迟计算的值
  • .NET/MSBuild 中的发布路径在哪里呢?如何在扩展编译的时候修改发布路径中的文件呢?
  • .net经典笔试题
  • .NET设计模式(2):单件模式(Singleton Pattern)
  • .net生成的类,跨工程调用显示注释
  • .Net转Java自学之路—SpringMVC框架篇六(异常处理)