备注:
马上下班了要,潦草解释一下
为啥需要转换,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, 刚好下班,走你┏ (゜ω゜)=☞