千家信息网

Springboot如何整合Dozer实现深度复制

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,这篇文章将为大家详细讲解有关Springboot如何整合Dozer实现深度复制,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。DozerDozer是一种Java Be
千家信息网最后更新 2026年11月04日Springboot如何整合Dozer实现深度复制

这篇文章将为大家详细讲解有关Springboot如何整合Dozer实现深度复制,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。


Dozer

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

常用于:

  • 代码层与层之间javabean转换, 如dao层PO转前端VO

  • 分布式中, DAO层PO转DTO, DO 以及web层DTO转VO

注意的场景:

  • 由于bean之间的深度复制, 在进行一些类似更新, 插入操作时尤其要注意最终接收到PO的一些关键字段如ID是否是真正需要的. 场景: 传入的DTO A为查出的DTO B复制后的, 这时候A里会有B的ID, 在插入A的时候很有可能造成主键冲突.

建议:

  • 不用Dozer最好, Dozer带来的是性能开销.(这是不可能…)

  • 某些特殊操作可以用切面控制特殊字段进行置空操作

SpringBoot整合Dozer

jar依赖引入

pom.xml加入以下依赖

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

dozer配置xml引入

resource文件夹下新建dozer文件夹, 并新建bean-mappings.xml, global-configuration.xml

bean-mappings.xml

global-configuration.xml

            yyyy-MM-dd HH:mm:ss              true        false                                            java.lang.Enum                java.lang.Integer                        

Dozer的JavaConfig

用于SpringBoot寻找DozerBeanMapperFactoryBean的配置
新建DozerMapperConfig.java

public class DozerMapperConfig {    @Bean    public DozerBeanMapperFactoryBean dozerBeanMapperFactoryBean(@Value("classpath*:dozer/*.xml") Resource[] resources) throws Exception {        final DozerBeanMapperFactoryBean dozerBeanMapperFactoryBean = new DozerBeanMapperFactoryBean();        dozerBeanMapperFactoryBean.setMappingFiles(resources);        return dozerBeanMapperFactoryBean;    }}

格式化工厂

建议新建包专门放置Dozer工具

接口定义: 新建IGenerator.java接口

public interface IGenerator {    /**      * @Description: 单个对象的深度复制及类型转换,vo/domain , po     * @param s 数据对象     * @param clz 复制目标类型     * @return     * @author banjuer@outlook.com     * @Time 2018年5月9日 下午3:53:24     */     T convert(S s, Class clz);    /**     * @Description       : 深度复制结果集(         ResultSet    为自定义的分页结果集)     *    @param s 数据对象            ResultSet    convert(    s, Class clz);  /**      * @Description: list深度复制     * @Time 2018年5月9日 下午3:54:08     List convert(List s, Class clz);     * @Description: set深度复制     * @Time 2018年5月9日 下午3:54:39     Set convert(Set s, Class clz);     * @Description: 数组深度复制     * @Time 2018年5月9日 下午3:54:57     T[] convert(S[] s, Class clz);}

IGenerator实现

@Component@Lazy(true)public class EJBGenerator implements IGenerator {    @Autowired    protected Mapper dozerMapper;    public  T convert(S s, Class clz) {        if (s == null) {            return null;        }        return this.dozerMapper.map(s, clz);    }     public              ResultSet      convert   (    s, Class clz) {       if (s == null) {     return null   ;     }    resultSet    =   new   ();  for    (S vs : s.getResult()) {   .getResult().add(  this   .dozerMapper.map(vs, clz));   .setTotal(s.getTotal());   .setExt(s.getExt());   .setModifyTime(s.getModifyTime());  return      public  List convert(List s, Class clz) {        List list = new ArrayList();        for (S vs : s) {            list.add(this.dozerMapper.map(vs, clz));        return list;    public  Set convert(Set s, Class clz) {        Set set = new HashSet();            set.add(this.dozerMapper.map(vs, clz));        return set;    public  T[] convert(S[] s, Class clz) {        @SuppressWarnings("unchecked")        T[] arr = (T[]) Array.newInstance(clz, s.length);        for (int i = 0; i < s.length; i++) {            arr[i] = this.dozerMapper.map(s[i], clz);        return arr;}

使用Demo

一般在公共父类中引入, 此处例子为前端公共Controller引入

@Controllerpublic class BaseController  {    @Autowired    protected EJBGenerator ejbGenerator = new EJBGenerator();    protected final Logger logger = LoggerFactory.getLogger(getClass());}
// 个人信息变更记录sessionSessionUserDetails userDetails = ejbGenerator.convert(userVo, SessionUserDetails.class);

关于"Springboot如何整合Dozer实现深度复制"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

深度 对象 整合 数据 篇文章 配置 特殊 之间 前端 场景 字段 建议 接口 文件 文件夹 更多 类型 结果 不错 实用 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 科技金融是不是互联网金融 圆梦互联网科技 科技互联网政务服务 为想互联网科技 互联网科技媒体 壹账通互联网科技 互联网科技logo 哈尔滨秒房互联网科技有限公司 中国最先进互联网科技公司 华中科技有哪些互联网大佬 互联网科技教育视频 中化能源互联网科技招聘 新兴科技互联网创新大赛颁奖典礼 互联网科技人工智能实验室 企晟互联网信息科技有限公司 保险科技服务互联网营销体系 工业互联网山东科技大学 上海钢联属于互联网科技股吗 互联网领先科技宣传片 互联网科技企业商标注意事项 中国互联网科技股 为想互联网科技 天津摩尔互联网科技 哈尔滨秒房互联网科技有限公司 济南华为互联网科技产业总部基地 互联网科技博主是什么意思 梅州GM互联网络科技有限公司 领航科技大厦互联网公司 福建互联网展示科技馆设计 互联网科技收购价值
0