MapStruct基本使用 以及MapStruct使用时出现得问题

文章介绍了MapStruct的使用方法,包括引入依赖、定义转换规则接口、由Spring管理以及具体的转换实现。在示例中,展示了如何通过@Mapper和@Mapping注解自定义转换规则,如在转换User到UserDTO时,如何利用StructTransferUtil工具类处理业务逻辑。同时,文章提醒注意Mapper注解与Mybatis的冲突问题。
摘要由CSDN通过智能技术生成


一、MapStruct使用

1.引入依赖

        <dependency>
            <groupId>org.mapstruct</groupId>
            <!-- jdk8以下就使用mapstruct -->
            <artifactId>mapstruct-jdk8</artifactId>
            <version>1.2.0.Final</version>
        </dependency>
        <dependency>
            <groupId>org.mapstruct</groupId>
            <artifactId>mapstruct-processor</artifactId>
            <version>1.2.0.Final</version>
        </dependency>

2.使用思路

1. 创建一个接口 并且定义转换规则 (核心)
2.将接口交给Sping容器管理 通过@Autowire 等注解实现依赖注入
3.调用j接口中对应的转换方法

MapStruct会自动根据接口定义得规则生成一个实现类,

3.具体实现

业务逻辑说明:转换后 userDTO.name=user.name+user.id (使用了StructTransferUtil工具类实现)

1.定义接口

@Mapper(componentModel = "spring",imports = {StructTransferUtil.class})

    /**
     * 转换成 InterviewCandidateBaseInfo
     * @param user
     * @return
     */
    @Mappings({
            @Mapping(target = "name",expression = "java(StructTransferUtil.strName(user.getName(),user.getId()))")
    })
    UserDTO toInterviewCandidateBaseInfoList( User user);
}

2.交给Spring管理

    @Autowired
    CandidateMapper candidateMapper;

3.调用接口实现转换

   User user = new User();
   user.setName("张三");
   user.setId(10);
   user.setPosition("程序员");
  UserDTO userDTO = candidateMapper.toInterviewCandidateBaseInfoList(Uuser);
    /*
       UserDTO 属性
       name   position
                 */

4. 接口注解功能讲解

  • @Mapper(componentModel = “spring”,imports = {StructTransferUtil.class})

componentModel = “spring" 是将该接口的实现类交给 SprIng管理 以后只需要通过依赖注入就可以使用该注解
imports = {StructTransferUtil.class} 引入工具类,通过工具类的方法实现类如:身份证加密解密,信息脱敏,日期格式化,类型转换等

存在的BUG
StructMap中Mapper注解和Mybatis的注解是一样的 注意在Mybatis扫描包的时候不要放在一起不然容易引起错误:会说实现类找不到

  • @Mappings({
    @Mapping(target = “name”,expression = “java(StructTransferUtil.strName(user.getName(),user.getId()))”)
    })

Mapping 转换规则
target: 目标类中的属性 (前端展示的数据DTO)
expression:自定义转换规则 (一般定义规则和目标类属性后 如果名称一样可以省略 source)
source: 资源类

如果需要多个类转换成同一个类 需要指定类中的属性 例如user.name teacher.name

总结

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值