mapStruct实体类转换,忽略字段大小写,下划线,统一改为驼峰匹配转换

本文介绍了如何使用MapStruct的SPI机制,创建自定义访问器命名策略,实现字段名的大小写转换和下划线转驼峰,以适应不同数据库和工具生成实体类时的不规范命名。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

备注:

马上下班了要,潦草解释一下
为啥需要转换,oracle等各种数据库,以及各种生成实体类工具,参差不齐,有大写,有小写,有下划线,就是咋不规范就不规范

SPI

api是对外开发的接口
spi则是内部开发的功能,让你能够改变其内部功能的逻辑

第一步

官方文档的参考:https://mapstruct.org/documentation/stable/reference/html/#using-spi
在这里插入图片描述
简单描述就是你这个不能作为一个类写在你要转换的包中,
需要单独一个jar包和mapstruct-processor.jar

创建一个单独的项目

马上下班了,我就直接上截图了
在这里插入图片描述
重点:resources中要有图中的文件
org.mapstruct.example.spi.CustomAccessorNamingStrategy
文件和名称一样
自定义的类要实现DefaultAccessorNamingStrategy对获取属性等方法进行重写,达到你想要的结果
内容如图
在这里插入图片描述
pom文件
在这里插入图片描述
代码块
欢的代码片高亮样式,下面展示同样高亮的 代码片.

/**
 * @author DONG
 * @date 2023/11/8
 * 忽略字段大小写转换,下划线‘_’转驼峰
 */
public class CustomAccessorNamingStrategy extends DefaultAccessorNamingStrategy {

    @Override
    public String getPropertyName(ExecutableElement getterOrSetterMethod) {
        return processingStr(super.getPropertyName(getterOrSetterMethod));
    }

    @Override
    public String getElementName(ExecutableElement adderMethod) {
        return processingStr(super.getElementName(adderMethod));
    }

    /**
     * 对字段进行处理
     * 下划线“_”转驼峰, 忽略大小写转换
     *
     * @param name 字段
     * @return 处理后字段
     */
    private String processingStr(String name) {
        if (name.contains("_")) {
            return StrUtil.toCamelCase(name);
        } else if (StrUtil.isUpperCase(name)) {
            return name.toLowerCase(Locale.ROOT);
        }
        return name;
    }


}

最后一步, 在你要转换的包中引入即可

在这里插入图片描述
网上说还要path一下,我的path不成功,我的不path也可以
所以我给注释掉了

<build>
        <plugins>
            <!--<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <annotationProcessorPaths>
                        <path>
                            <groupId>org.mapstruct</groupId>
                            <artifactId>mapstruct-processor</artifactId>
                            <version>${org.mapstruct.version}</version>
                        </path>
                        <path>
                            <groupId>org.mapstruct.examples.spi</groupId>
                            <artifactId>mapstrut-spi-impl</artifactId>
                            <version>0.0.1-SNAPSHOT</version>
                        </path>
                    </annotationProcessorPaths>
                </configuration>
            </plugin>-->
        </plugins>
    </build>

看效果吧

在这里插入图片描述
在这里插入图片描述
可以看到结果,大小写忽略掉了,下划线转驼峰了

okokok, 刚好下班,走你┏ (゜ω゜)=☞

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值