IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> MapStruct 使用注意 -> 正文阅读

[Java知识库]MapStruct 使用注意

MapStruct 应该很多人都使用过,或者正在使用。不得不说,作为一个Java Bean 转换的工具,他表现的很出色:1. 功能强大 2. 编译时插件,不会导致代码运行时额外的耗时开销 3.很容易上手。但是呢,如果使用的过程中不注意细节也是经常会出现问题的。记录一下今天使用的过程中遇到的一个由细节导致的问题。(千里之堤毁于蚁穴……)

场景:

项目内部有两个类 A、B如下:

public Class A {
	private B b;
  private String name;
  ……
}

public class B {
  private Integer amout;
  ……
}

项目外部有三个类 A1、com.xxx.B1、com.yy.B1 如下:

public Class A1 {
// 注意: 此处 B1 是 com.xxx.B1
private B1 b;
private String name;
……
}

com.xxx.B1:
public class B1 {
private Integer amout;
……
}

com.yy.B1:
public class B1 {
private Integer amout;
……
}

我现在要做的事情呢,就是要讲项目外部类 A1、B1 转换成 项目内部类 A、B

于是乎,开始做法。按照 MapStruct 的使用方法,创建了 AMppper、BMapper 接口

@Mapper(uses = {BMapper.class})
public interface AMapper {
AMapper INSTANCE = Mappers.getMapper(AMapper.class);
A convertInfo(A1 a1);
}

@Mapper
public interface BMapper {
// 注意,此处 B1 引入的是 com.yy.B1
B convertInfo(B1 b1);
}

然后,编译一下代码,以为 大功告成,美滋滋。编译完成之后,看了一下生成的 类,发现咦!实现类里 没有 BMapper !

pulic class AMapperImpl implements AMapper{

@Override
public A convertInfo(A1 a1) {
if ( a1 == null ) {
return null;
}

    A a = new A();
  // …… 此处省略五千字,付费可看,咳咳
    return a;
}

}

期望的应该是这样的:

pulic class AMapperImpl implements AMapper{
private final BMapper bMapper = Mappers.getMapper(BMapper.class);
@Override
public A convertInfo(A1 a1) {
if ( a1 == null ) {
return null;
}

    A a = new A();
  // …… 此处省略五千字
  a.setB(bMapper.convert(a1.getB1()));
    return a;
}

}

为什么会这样呢?来,我们5个WHY 走起……

……

原来如此,A1 类中引入的 B1 类和 BMapper 中的convertInfo方法入参 B1 类不是同一个类。

卒!

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-04-27 11:11:09  更:2022-04-27 11:13:54 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 2:42:54-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码