热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

idea整合git_SpringBoot2.0实战(7)整合MapStruct优雅地复制属性

在之前章节的例子中,我们在接收参数的时候都是使用的User类对象,这是一个DO对象,是用于与数据库进行交互的,而不是用于与前

在之前章节的例子中,我们在接收参数的时候都是使用的 User 类对象,这是一个 DO 对象,是用于与数据库进行交互的,而不是用于与前端业务进行交互的,所以需要创建一个 BO 业务对象用来与前端业务进行交互,保证数据隔离性及安全性。

接收参数换成了 BO 对象,但数据入库使用的是 DO 对象,这中间就需要将 BO 对象的属性复制到 DO 对象,然后代码里就会出现大量的 do.set(bo.get()),这让代码显得臃肿,繁琐。当然,通过反射或者是使用 Spring 提供的 BeanUtils.copyProperties() 等方法也可以达到简化代码的效果,但是在效率方面不尽如人意。

而 MapStruct 则提供了一种高效的解决方案,其实现方式是在编译期,自动生成相关的 do.set(bo.get()) 代码,所以,在运行期实际上就是直接调用原生的get/set 方法。

相关知识

MapStruct官网:http://mapstruct.org

课程目标

SpringBoot 整合 MapStruce 以及 Lombok

操作步骤

本文使用 Idea 集成开发环境

环境准备

安装 MapStruce 插件

File -> settings,打开 Idea 的设置界面,从左侧栏选择 Plugins 选项,再在右侧查询 MapStruce,点击安装。

设置IDE

File -> Settings 打开设置界面,

选择 Build,Execution,Deployment -> Compiler -> Annotation Processors 进入设置界面,

勾选 enable annotation processing

添加依赖

添加 mapstruct 的依赖

afed027fc198bfc34c944261cb94c42b.png

同时整合 Lombok,添加对 Lombok 的依赖

87316259ad69a1fdbdad1b8be96848f7.png

添加 mapstruct 的插件依赖,同时配置 Lombok

981dc5c41117ef30ea3e9a2d3a92c291.png

编码

编写 DTO 类,用于接收前端入参

b1cdb32de88025356dfa1614319f15da.png

编写 Mappering 转换器

  • 类上添加 @Mapper 注解,用于项目启动时自动加载
  • 方法上添加 @Mapping 注解,用于设置转换规则,source 设置源对象属性,target 设置目标对象属性,如果源对象属性名与目标对象属性名一致,则无需设置,在本例中,我们需要将 UserBO 对象的 mobile 属性复制至 User 对象的 name 属性中
  • 设置常量 INSTANCE,用于其它方法调用,也可以通过 Spring 的 IOC 进行注入
4db21a9f9e557b7b6b04b4ff63c85b59.png

编写 controller 接口

0d72997000fb2689179335872de44755.png

源码地址

本章源码 : https://github.com/caiyuanzi-song/boot.git

总结

MapStruct 释放掉大量的属性复制的代码,改为编译时自动生成,所以只是精简了项目代码。

注意

项目编译后,UserMapper 接口会在 target 目录的相应路径下生成一个 class 实现类,通过查看该实现类,可以看到实际生成的代码结构。但是,在编码过程中,如果修改了 UserMapper 接口内容,Idea 有时并不会重新编译,导致最新的修改无法生效,必须得先对项目执行一次 clean 操作,清除掉 class 实现类,再次启动时就会重新编译。



推荐阅读
author-avatar
東臨天下2502892423
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有