SpringBoot Dozer
文章目录
- 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相关推荐
- SpringBoot 整合 Dozer 映射框架
SpringBoot 整合 Dozer 映射框架 1. Dozer 介绍 2. 为什么要使用映射框架 Dozer 3. Dozer 映射框架的使用 1. Dozer 介绍 Dozer 是一个 Java ...
- SpringBoot集成Dozer
一.什么是Dozer? Dozer是一种Java Bean到Java Bean的映射器,递归地将数据从一个对象复制到另一个对象,它是一个强大的,通用的,灵活的,可重用的和可配置的开源映射框架. 说白点 ...
- SpringBoot学习小结之Dozer
前言 Dozer是一个Java Bean到Java Bean的Mapper,可将数据从一个对象递归复制到另一个对象.Dozer支持简单属性.复杂属性映射,Java中常见集合相互映射和递归映射. Doz ...
- SpringBoot使用dozer
Dozer是Java Bean到Java Bean映射器,它以递归方式将数据从一个对象复制到另一个对象.通常,这些Java Bean将具有不同的复杂类型. Dozer支持简单属性映射,复杂类型映射,双 ...
- Dozer的使用(整合springboot)
dozer是实体类与实体类之间转换的工具,下面是简单操作配置 引入依赖: <!--dozer 实体类转换工具--><dependency><groupId>net. ...
- springboot 技术图谱_java后台(Springboot)开发知识图谱高频技术汇总-学习路线...
[原创]java后台(Springboot)开发知识图谱&&高频技术汇总 1.引言: 学习一个新的技术时,其实不在于跟着某个教程敲出了几行.几百行代码,这样你最多只能知其然而不知其所以 ...
- dozer无法映射java8中的LocalDateTime类型的解决方案
dozer是一个很方便的bean映射工具包,可以很轻松地做到两个bean对象的属性值复制,但是dozer包在2014年的时候停止更新了,而jdk1.8也是2014年发布的,所以对于java8中的新日期 ...
- BootDo架构-基于 Springboot 和 Mybatis 的后台管理系统
BootDo 面向学习型的开源框架 平台简介 BootDo是高效率,低封装,面向学习型,面向微服的开源Java EE开发框架. BootDo是在SpringBoot基础上搭建的一个Java基础开发平台 ...
- 基于 Springboot 和 Mybatis 的后台管理系统 BootDo | 软件推介
面向学习型的开源框架,简洁高效,减少过渡封装,展现技术本质 授权协议:GPL 开发语言:Java 操作系统:跨平台 软件作者:lcg0124 项目介绍 面向学习型的开源框架,简洁高效,减少过渡封装,展 ...
最新文章
- 鱼c论坛python课后题-【零基础】Python3学习课后练习题(十九)
- 最全解释P2P、P2C 、O2O 、B2C、B2B、 C2C的定义
- PHP5.4.3,有些插件不是你想用就能用的
- grafana导出pdf监控日报
- HDU-4035 Maze 概率DP
- hal库开启中断关中断_【MCU】寄存器、标准库、HAL库、LL库,这么多库!你叫我怎么选?...
- java飞机订票系统课程设计_JAVA数据结构课程设计,航空订票系统求助
- pip 安装GPU版本pytorch 与cuda下载
- 放弃去FBI的机会,在美做了2年数据研究工作,如今回国创业,他把全球最顶级的智能预测算法带到了国内
- 文本分类——常用经典技术解析(jieba,word2vec,样本不平衡问题)
- java timeunit_java并发之TimeUnit
- 颜色选择器---Kodu少儿编程第九天
- micropython STM32移植笔记(一)
- 咖啡屋时光书城【原创】
- css 设置背景图一半_css怎么背景图片显示不全?
- 【转】专家推荐 13个优秀的UML建模工具软件
- 为了忘却的纪念---番茄花园 Windows XP 下载地址合集
- jam stack_纯JAM堆栈
- 随机森林算法及贝叶斯优化调参Python实践
- week 11 67
热门文章
- 关于傅里叶分析与香农采样定理
- Python多线程下载有声小说
- 基于SSM+springboot框架系统的易购网
- 如何开启谷歌浏览器的实验室功能
- 设备巡检管理系统,为企业降本增效
- html+css+jquery,html+css+js(+JQuery)制作扑克牌图片切换效果
- [下载]黑莓BlackBerry开发官方文档系列
- DLL 注入 —— 反射式注入(内存手动映射)
- mysql中vlookup函数_EXCEL表格中VLOOKUP函数怎么用
- 操作系统原理_田丽华(2)操作系统结构