文章目录

  • Dozer
    • springboot 配置 Dozer
    • 演示
    • Dozer工具接口和实现类
    • 全面测试
    • 项目实战演示

Dozer

Dozer是什么? Dozer是一个JavaBean映射工具库。

它支持简单的属性映射,复杂类型映射,双向映射,隐式显式的映射,以及递归映射。

它支持三种映射方式:注解、API、XML。

springboot Dozer 可以作为项目实战

项目结构:

springboot 配置 Dozer

1.在pom.xml文件里添加Dozer依赖

<!-- dozer 对象间属性值赋值,不同属性名,借助map映射 -->
<dependency><groupId>net.sf.dozer</groupId><artifactId>dozer</artifactId><version>5.4.0</version><exclusions><exclusion><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId></exclusion><exclusion><groupId>log4j</groupId><artifactId>log4j</artifactId></exclusion></exclusions>
</dependency>

2.在config文件夹下添加:DozerConfig.java类

一定要在config下添加:springboot项目目录若没有config文件夹就新建一个

配置完成就可以测试使用mapper映射了!

package com.dist.config;import org.dozer.spring.DozerBeanMapperFactoryBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** @author yangmin* @date 2018/4/11* 返回一个dozer实例bean,目的是做对象间属性值的赋值操作*/
@Configuration
public class DozerConfig {@Beanpublic DozerBeanMapperFactoryBean mapper() {return new DozerBeanMapperFactoryBean();}
}

到此,项目就可以使用Dozer了,用Mapper mapper,可以在controller层也可以在server层。

@Autowired
private Mapper mapper;

演示

此处是springboot项目测试,

在entity文件夹目录下,创建实体类

创建UserDTO.java类

package com.dist.entity.dto;import lombok.Data;
import java.io.Serializable;//下载idea插件 lombok ,或网上百度@Data
//下载方式:https://blog.csdn.net/qq_37433657/article/details/83275051
@Data
public class UserDTO implements Serializable {private String userCode;private String loginName;private String loginPassword;private String deviceCode;private String systemCode;
}

创建:UserVO.java类

package com.dist.entity.dto;import lombok.Data;
import java.io.Serializable;@Data
public class UserVO implements Serializable {private String userCode;private String loginName;private String loginPassword;
}

在test文件夹下创建测试类:

DozerTest.java

package com.dist.test;import com.dist.SpringbootdemoApplication;
import com.dist.entity.dto.UserDTO;
import com.dist.entity.dto.UserVO;
import org.dozer.Mapper;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;@RunWith(SpringRunner.class)
@SpringBootTest(classes = {SpringbootdemoApplication.class})
public class DozerTest{@Autowiredprivate Mapper mapper;/*** 单个对象的深度复制及类型转换,vo/domain , po* 输出结果: UserVO(userCode=123, loginName=null, loginPassword=null)*/@Testpublic void testMapper(){UserDTO userDTO =new UserDTO();userDTO.setUserCode("123");UserVO userVO = mapper.map(userDTO, UserVO.class);System.out.println(userVO);}
输出结果: UserVO(userCode=123, loginName=null, loginPassword=null)

映射成功,实现了类的深度复制;并且,过滤掉了前端不需要的数据;

Dozer工具接口和实现类

IGenerator.java接口:封装了Mapper工具接口:实现了list、set,数组,对象等深度复制!

package com.dist.utils;import java.util.List;
import java.util.Set;/*** @author zhengja@dist.com.cn* @data 2019/5/30 15:19*/
public interface IGenerator {/*** @Description: 单个对象的深度复制及类型转换,vo/domain , po* @param s 数据对象* @param clz 复制目标类型* @return* @author banjuer@outlook.com* @Time 2018年5月9日 下午3:53:24*/<T, S> T convert(S s, Class<T> clz);/*** @Description: list深度复制* @param s 数据对象* @param clz 复制目标类型* @return* @author banjuer@outlook.com* @Time 2018年5月9日 下午3:54:08*/<T, S> List<T> convert(List<S> s, Class<T> clz);/*** @Description: set深度复制* @param s 数据对象* @param clz 复制目标类型* @return* @author banjuer@outlook.com* @Time 2018年5月9日 下午3:54:39*/<T, S> Set<T> convert(Set<S> s, Class<T> clz);/*** @Description: 数组深度复制* @param s 数据对象* @param clz 复制目标类型* @return* @author banjuer@outlook.com* @Time 2018年5月9日 下午3:54:57*/<T, S> T[] convert(S[] s, Class<T> clz);}

IGenerator的实现类:EJBGenerator.java

package com.dist.utils;import org.dozer.Mapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;import java.lang.reflect.Array;
import java.util.*;/*** @author zhengja@dist.com.cn* @data 2019/5/30 15:21*/
@Component
@Lazy(true)
public class EJBGenerator implements IGenerator {@Autowiredprotected Mapper mapper;/*** @Description: 单个对象的深度复制及类型转换,vo/domain , po* @param s 数据对象* @param clz 复制目标类型* @param <T>* @param <S>* @return*/@Overridepublic <T, S> T convert(S s, Class<T> clz) {if (s == null) {return null;}return this.mapper.map(s, clz);}/***@Description: list深度复制* @param s 数据对象* @param clz 复制目标类型* @param <T>* @param <S>* @return*/@Overridepublic <T, S> List<T> convert(List<S> s, Class<T> clz) {if (s == null) {return null;}List<T> list = new ArrayList<T>();for (S vs : s) {list.add(this.mapper.map(vs, clz));}return list;}/*** @Description: Set深度复制* @param s 数据对象* @param clz 复制目标类型* @param <T>* @param <S>* @return*/@Overridepublic <T, S> Set<T> convert(Set<S> s, Class<T> clz) {if (s == null) {return null;}Set<T> set = new HashSet<T>();for (S vs : s) {set.add(this.mapper.map(vs, clz));}return set;}/*** @Description: 数组深度复制* @param s 数据对象* @param clz 复制目标类型* @param <T>* @param <S>* @return*/@Overridepublic <T, S> T[] convert(S[] s, Class<T> clz) {if (s == null) {return null;}@SuppressWarnings("unchecked")T[] arr = (T[]) Array.newInstance(clz, s.length);for (int i = 0; i < s.length; i++) {arr[i] = this.mapper.map(s[i], clz);}return arr;}
}

全面测试

package com.dist.test;import com.dist.SpringbootdemoApplication;
import com.dist.entity.dto.UserDTO;
import com.dist.entity.dto.UserVO;
import com.dist.utils.IGenerator;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;/*** Dozer是什么?Dozer是一个JavaBean映射工具库。它支持简单的属性映射,复杂类型映射,双向映射,隐式显式的映射,以及递归映射。它支持三种映射方式:注解、API、XML。它是开源的,遵从Apache 2.0 协议* @author zhengja@dist.com.cn* @data 2019/5/30 14:36*/
@RunWith(SpringRunner.class)
@SpringBootTest(classes = {SpringbootdemoApplication.class})
public class DozerTest{/*@Autowiredprivate Mapper mapper;*//*** 封装了Mapper工具接口:实现了list、set,数组,对象等深度复制!*/@AutowiredIGenerator iGenerator;/*** 单个对象的深度复制及类型转换,vo/domain , po* 输出结果: UserVO(userCode=123, loginName=null, loginPassword=null)*//*@Testpublic void testMapper(){UserDTO userDTO =new UserDTO();userDTO.setUserCode("123");UserVO userVO = mapper.map(userDTO, UserVO.class);System.out.println(userVO);}*//***单个对象的深度复制及类型转换,vo/domain , po* 输出结果: UserVO(userCode=123, loginName=null, loginPassword=null)*/@Testpublic void test(){UserDTO userDTO =new UserDTO();userDTO.setUserCode("123");UserVO userVO = iGenerator.convert(userDTO, UserVO.class);//UserVO userVO = mapper.map(userDTO, UserVO.class);System.out.println(userVO);}/*** list深度复制*/@Testpublic void test1(){List<UserDTO> dtoList = new ArrayList<>();UserDTO userDTO =new UserDTO();userDTO.setUserCode("123");dtoList.add(userDTO);List<UserVO> userVOS = iGenerator.convert(dtoList, UserVO.class);System.out.println(userVOS);}/****set深度复制*/@Testpublic void test2(){Set<UserDTO> dtoSet = new HashSet<>();UserDTO userDTO =new UserDTO();userDTO.setUserCode("123");dtoSet.add(userDTO);Set<UserVO> userVOS = iGenerator.convert(dtoSet, UserVO.class);System.out.println(userVOS);}/*** 数组深度复制*/@Testpublic void test13(){UserDTO[] dtos = new UserDTO[3];UserDTO userDTO =new UserDTO();userDTO.setUserCode("123");dtos[0] = userDTO;dtos[1] = userDTO;dtos[2] = userDTO;UserVO[] userVOS = iGenerator.convert(dtos, UserVO.class);for (int i=0; i<userVOS.length;i++){System.out.println(userVOS[i]);}}
}

到此完成所有的测试!

<h2>测试结果:已经在测试的上面标注</h2>

项目实战演示

@RestController
@RequestMapping(value = "rest/admin/v1")
@Api(tags = {"OMS-UserController"}, description = "用户模块")
public class UserController extends BaseController {@ReferenceIUserService vUserService;@AutowiredMapper mapper;@ApiOperation(value = "获取用户", httpMethod = "GET")@GetMapping(value = "v1/get/user")public ResponseData getUser() {// 获取用户信息VUserinfo userInfo = vUserService.getUserInfo();//映射-过滤,只返回给前端需要的数据字段/数据格式UserDTO userDTO = mapper.map(userInfo, UserDTO.class);return ResponseUtil.success(userDTO);}
************************本片文章阅读结束************************作者:宇宙小神特别萌
个人博客:www.zhengjiaao.cn
Gitee 仓库:https://gitee.com/zhengjiaao
Github 仓库:https://github.com/zhengjiaao?tab=repositories
描述:喜欢文章的点赞收藏一下,关注不迷路,避免以后找不到哦,大家遇到问题下方可评论************************本片文章阅读结束************************

SpringBoot Dozer相关推荐

  1. SpringBoot 整合 Dozer 映射框架

    SpringBoot 整合 Dozer 映射框架 1. Dozer 介绍 2. 为什么要使用映射框架 Dozer 3. Dozer 映射框架的使用 1. Dozer 介绍 Dozer 是一个 Java ...

  2. SpringBoot集成Dozer

    一.什么是Dozer? Dozer是一种Java Bean到Java Bean的映射器,递归地将数据从一个对象复制到另一个对象,它是一个强大的,通用的,灵活的,可重用的和可配置的开源映射框架. 说白点 ...

  3. SpringBoot学习小结之Dozer

    前言 Dozer是一个Java Bean到Java Bean的Mapper,可将数据从一个对象递归复制到另一个对象.Dozer支持简单属性.复杂属性映射,Java中常见集合相互映射和递归映射. Doz ...

  4. SpringBoot使用dozer

    Dozer是Java Bean到Java Bean映射器,它以递归方式将数据从一个对象复制到另一个对象.通常,这些Java Bean将具有不同的复杂类型. Dozer支持简单属性映射,复杂类型映射,双 ...

  5. Dozer的使用(整合springboot)

    dozer是实体类与实体类之间转换的工具,下面是简单操作配置 引入依赖: <!--dozer 实体类转换工具--><dependency><groupId>net. ...

  6. springboot 技术图谱_java后台(Springboot)开发知识图谱高频技术汇总-学习路线...

    [原创]java后台(Springboot)开发知识图谱&&高频技术汇总 1.引言: 学习一个新的技术时,其实不在于跟着某个教程敲出了几行.几百行代码,这样你最多只能知其然而不知其所以 ...

  7. dozer无法映射java8中的LocalDateTime类型的解决方案

    dozer是一个很方便的bean映射工具包,可以很轻松地做到两个bean对象的属性值复制,但是dozer包在2014年的时候停止更新了,而jdk1.8也是2014年发布的,所以对于java8中的新日期 ...

  8. BootDo架构-基于 Springboot 和 Mybatis 的后台管理系统

    BootDo 面向学习型的开源框架 平台简介 BootDo是高效率,低封装,面向学习型,面向微服的开源Java EE开发框架. BootDo是在SpringBoot基础上搭建的一个Java基础开发平台 ...

  9. 基于 Springboot 和 Mybatis 的后台管理系统 BootDo | 软件推介

    面向学习型的开源框架,简洁高效,减少过渡封装,展现技术本质 授权协议:GPL 开发语言:Java 操作系统:跨平台 软件作者:lcg0124 项目介绍 面向学习型的开源框架,简洁高效,减少过渡封装,展 ...

最新文章

  1. 鱼c论坛python课后题-【零基础】Python3学习课后练习题(十九)
  2. 最全解释P2P、P2C 、O2O 、B2C、B2B、 C2C的定义
  3. PHP5.4.3,有些插件不是你想用就能用的
  4. grafana导出pdf监控日报
  5. HDU-4035 Maze 概率DP
  6. hal库开启中断关中断_【MCU】寄存器、标准库、HAL库、LL库,这么多库!你叫我怎么选?...
  7. java飞机订票系统课程设计_JAVA数据结构课程设计,航空订票系统求助
  8. pip 安装GPU版本pytorch 与cuda下载
  9. 放弃去FBI的机会,在美做了2年数据研究工作,如今回国创业,他把全球最顶级的智能预测算法带到了国内
  10. 文本分类——常用经典技术解析(jieba,word2vec,样本不平衡问题)
  11. java timeunit_java并发之TimeUnit
  12. 颜色选择器---Kodu少儿编程第九天
  13. micropython STM32移植笔记(一)
  14. 咖啡屋时光书城【原创】
  15. css 设置背景图一半_css怎么背景图片显示不全?
  16. 【转】专家推荐 13个优秀的UML建模工具软件
  17. 为了忘却的纪念---番茄花园 Windows XP 下载地址合集
  18. jam stack_纯JAM堆栈
  19. 随机森林算法及贝叶斯优化调参Python实践
  20. week 11 67

热门文章

  1. 关于傅里叶分析与香农采样定理
  2. Python多线程下载有声小说
  3. 基于SSM+springboot框架系统的易购网
  4. 如何开启谷歌浏览器的实验室功能
  5. 设备巡检管理系统,为企业降本增效
  6. html+css+jquery,html+css+js(+JQuery)制作扑克牌图片切换效果
  7. [下载]黑莓BlackBerry开发官方文档系列
  8. DLL 注入 —— 反射式注入(内存手动映射)
  9. mysql中vlookup函数_EXCEL表格中VLOOKUP函数怎么用
  10. 操作系统原理_田丽华(2)操作系统结构