博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
dozer做model映射
阅读量:6328 次
发布时间:2019-06-22

本文共 4510 字,大约阅读时间需要 15 分钟。

  hot3.png

在项目中要经常转换model, 有了自动转换无疑是最优雅, 最有效率的工具

maven pom.xml

net.sf.dozer
dozer-spring
5.5.1
net.sf.dozer
dozer
5.5.1

DozerConfig.java

package com.xxx.xxx.config.dozer;import org.dozer.spring.DozerBeanMapperFactoryBean;import org.springframework.beans.factory.annotation.Value;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.core.io.Resource;@Configurationpublic class DozerConfig {    @Value("classpath*:dozer/*.xml")    private Resource[] resources;    @Bean    public DozerBeanMapperFactoryBean dozerBeanMapperFactoryBean() {        DozerBeanMapperFactoryBean dozerBeanMapperFactoryBean = new DozerBeanMapperFactoryBean();        dozerBeanMapperFactoryBean.setMappingFiles(this.resources);        return dozerBeanMapperFactoryBean;    }}

DozerEnumConverter.java (对枚举的支持)

package com.xxx.xxx.config.dozer;import com.xxx.xxx.enums.BaseEnum;import org.dozer.CustomConverter;import org.dozer.MappingException;import java.util.Objects;public class DozerEnumConverter implements CustomConverter {    @Override    public Object convert(Object destination, Object source, Class
destinationClass, Class
sourceClass) { if (source == null) { return null; } if (source instanceof BaseEnum) { return ((BaseEnum) source).getCode(); } else if (source instanceof Integer && destinationClass.isEnum()) { BaseEnum[] enums = (BaseEnum[]) destinationClass.getEnumConstants(); for (final BaseEnum e : enums) { if (Objects.equals(e.getCode(), source)) { return e; } } } else { throw new MappingException(String.format( "Converter %s was used incorrectly. Arguments were: %s and %s", this.getClass().getSimpleName(), destinationClass.getName(), source )); } return null; }}

DozerMapperFactory.java (封装一个转换工具, 便于使用)

package com.xxx.xxx.config.dozer;import org.dozer.Mapper;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component;import java.lang.reflect.Array;import java.util.ArrayList;import java.util.HashSet;import java.util.List;import java.util.Set;@Componentpublic class DozerMapperFactory {    @Autowired    protected Mapper dozerMapper;    /**     * 单个对象的深度复制及类型转换     * @param source 数据对象     * @param targetClass 复制目标类型     */    public 
T convert(S source, Class
targetClass) { if (source == null) { return null; } return this.dozerMapper.map(source, targetClass); } /** * list深度复制 * @param sources 数据对象 * @param targetClass 复制目标类型 */ public
List
convert(List
sources, Class
targetClass) { if (sources == null) { return null; } List
list = new ArrayList
(); for (S source : sources) { list.add(this.dozerMapper.map(source, targetClass)); } return list; } /** * set深度复制 * @param sources 数据对象 * @param targetClass 复制目标类型 */ public
Set
convert(Set
sources, Class
targetClass) { if (sources == null) { return null; } Set
set = new HashSet
(); for (S source : sources) { set.add(this.dozerMapper.map(source, targetClass)); } return set; } /** * 数组深度复制 * @param sources 数据对象 * @param targetClass 复制目标类型 */ public
T[] convert(S[] sources, Class
targetClass) { if (sources == null) { return null; } @SuppressWarnings("unchecked") T[] array = (T[]) Array.newInstance(targetClass, sources.length); for (int i = 0; i < sources.length; i++) { array[i] = this.dozerMapper.map(sources[i], targetClass); } return array; }}

resource中xml配置文件

dozer/global-configuration.xml

yyyy-MM-dd HH:mm:ss
true
false
com.xxx.xxx.enums.BaseEnum
java.lang.Integer

dozer/bean-mappings.xml

com.xxx.xxx.entity.User
com.xxx.xxx.model.UserModel
id
userId

dozer的配置到这里就结束了

转载于:https://my.oschina.net/yehun/blog/3047642

你可能感兴趣的文章
各种情况下block的类型
查看>>
ThinkPHP 3.2.x 集成极光推送指北
查看>>
MYSQL 表情评论存储(emoji)
查看>>
js作用域链
查看>>
java中如何选择Collection Class--java线程(第3版)
查看>>
ASP.NET页面之间传递值的几种方式
查看>>
Linux系统权限
查看>>
TinyTemplate模板引擎火热出炉,正式开源了~~~
查看>>
android开发之GPS定位详解
查看>>
Mac OS X如何重装 苹果电脑重装操作系统
查看>>
集算器读写EXCEL文件的代码示例
查看>>
Ubuntu Server上搭建可用于生产环境的ASP.NET服务器
查看>>
php---PHP使用GD库实现截屏
查看>>
华为交换机802.1x动态下发vlan配置
查看>>
spring boot websocket + thy模版
查看>>
查看文件的真实路径
查看>>
如何开发一个自己的 RubyGem?
查看>>
职工系统150206308
查看>>
『中级篇』K8S最小调度单位Pod(62)
查看>>
ACE网络编程思考(一)
查看>>