返回顶部
首页 > 资讯 > 精选 >Springboot如何整合Dozer实现深度复制
  • 884
分享到

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

2023-06-29 10:06:37 884人浏览 安东尼
摘要

这篇文章将为大家详细讲解有关SpringBoot如何整合Dozer实现深度复制,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。DozerDozer是一种Java Bean到Java Bean的映射器,递归地

这篇文章将为大家详细讲解有关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加入以下依赖

<dependency>    <groupId>net.sf.dozer</groupId>    <artifactId>dozer-spring</artifactId>    <version>5.5.1</version></dependency><dependency>    <groupId>net.sf.dozer</groupId>    <artifactId>dozer</artifactId>    <version>5.5.1</version></dependency>

dozer配置xml引入

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

bean-mappings.xml

<?xml version="1.0" encoding="UTF-8"?><mappings xmlns="Http://dozer.sourceforge.net" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="http://dozer.sourceforge.net          http://dozer.sourceforge.net/schema/beanmapping.xsd"></mappings>

global-configuration.xml

<?xml version="1.0" encoding="UTF-8"?><mappings xmlns="http://dozer.sourceforge.net" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="http://dozer.sourceforge.net          http://dozer.sourceforge.net/schema/beanmapping.xsd">    <configuration>        <date-fORMat>yyyy-MM-dd HH:mm:ss</date-format>              <wildcard>true</wildcard>        <trim-strings>false</trim-strings>        <!-- 自定义的枚举与Integer转换器, 下节介绍 -->        <custom-converters>            <converter type="com.dongao.beacon.ds.web.admin.tookit.EnumIntegerBiDirectionalDozerConverter">                <class-a>java.lang.Enum</class-a>                <class-b>java.lang.Integer</class-b>            </converter>        </custom-converters>    </configuration></mappings>

Dozer的JavaConfig

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

public class DozerMapperConfig {    @Bean    public DozerBeanMapperFactoryBean dozerBeanMapperFactoryBean(@Value("classpath*:dozer    <T, S> T convert(S s, Class<T> clz);    /**     * @Description       : 深度复制结果集(         ResultSet    为自定义的分页结果集)     *    @param s 数据对象       <T, S>     ResultSet   <T> convert(   <S> s, Class<T> clz);  /**      * @Description: list深度复制     * @Time 2018年5月9日 下午3:54:08    <T, S> List<T> convert(List<S> s, Class<T> clz);     * @Description: set深度复制     * @Time 2018年5月9日 下午3:54:39    <T, S> Set<T> convert(Set<S> s, Class<T> clz);     * @Description: 数组深度复制     * @Time 2018年5月9日 下午3:54:57    <T, S> T[] convert(S[] s, Class<T> clz);}

IGenerator实现

@Component@Lazy(true)public class EJBGenerator implements IGenerator {    @Autowired    protected Mapper dozerMapper;    public <T, S> T convert(S s, Class<T> clz) {        if (s == null) {            return null;        }        return this.dozerMapper.map(s, clz);    }     public      <T, S>        ResultSet   <T>   convert   (   <S> s, Class<T> clz) {       if (s == null) {     return null   ;     }    resultSet    =   new   <T>();  for    (S vs : s.getResult()) {   .getResult().add(  this   .dozerMapper.map(vs, clz));   .setTotal(s.getTotal());   .setExt(s.getExt());   .setModifyTime(s.getModifyTime());  return      public <T, S> List<T> convert(List<S> s, Class<T> clz) {        List<T> list = new ArrayList<T>();        for (S vs : s) {            list.add(this.dozerMapper.map(vs, clz));        return list;    public <T, S> Set<T> convert(Set<S> s, Class<T> clz) {        Set<T> set = new HashSet<T>();            set.add(this.dozerMapper.map(vs, clz));        return set;    public <T, S> T[] convert(S[] s, Class<T> 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实现深度复制”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

--结束END--

本文标题: Springboot如何整合Dozer实现深度复制

本文链接: https://lsjlt.com/news/324088.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Springboot如何整合Dozer实现深度复制
    这篇文章将为大家详细讲解有关Springboot如何整合Dozer实现深度复制,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。DozerDozer是一种Java Bean到Java Bean的映射器,递归地...
    99+
    2023-06-29
  • Springboot整合Dozer实现深度复制的方法
    目录DozerSpringBoot整合Dozerjar依赖引入dozer配置xml引入Dozer的JavaConfig格式化工厂使用DemoDozer Dozer是一种Java Be...
    99+
    2024-04-02
  • SpringBoot如何整合Dozer映射框架
    今天小编给大家分享一下SpringBoot如何整合Dozer映射框架的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1. Do...
    99+
    2023-07-02
  • springboot整合websocket如何实现群聊
    这篇文章将为大家详细讲解有关springboot整合websocket如何实现群聊,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。实现思路发送者向服务器发送大家早上好。其它客户端可以收到对应消息。项目展示通...
    99+
    2023-06-15
  • SpringBoot如何实现整合微信支付
    这篇文章将为大家详细讲解有关SpringBoot如何实现整合微信支付,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1.准备工作1.1 数据库表这里涉及微信支付一共两个表:订单表支付记录表1.2 实体类数据...
    99+
    2023-06-22
  • 如何进行SpringBoot整合JWT的实现
    这篇文章跟大家分析一下“如何进行SpringBoot整合JWT的实现”。内容详细易懂,对“如何进行SpringBoot整合JWT的实现”感兴趣的朋友可以跟着小编的思路慢慢深入来阅读一下,希望阅读后能够对大家有所帮助。下面跟着小编一起深入学习...
    99+
    2023-06-26
  • SpringBoot整合RabbitMQ实现消息确认机制
    前面几篇案例已经将常用的交换器(DirectExchange、TopicExchange、FanoutExchange)的用法介绍完了,现在我们来看一下消息的回调,也就是消息确认。 ...
    99+
    2024-04-02
  • SpringBoot整合Redisson如何实现分布式锁
    这篇文章将为大家详细讲解有关SpringBoot整合Redisson如何实现分布式锁,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Redisson是架设在redis基础上的一个Java驻内存数据网格(In...
    99+
    2023-06-25
  • springboot如何整合gateway实现网关功能
    这篇文章主要讲解了“springboot如何整合gateway实现网关功能”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“springboot如何整合gateway实现网关功能”吧!1.使用场...
    99+
    2023-06-29
  • SpringBoot整合Retry如何实现错误重试
    本文小编为大家详细介绍“SpringBoot整合Retry如何实现错误重试”,内容详细,步骤清晰,细节处理妥当,希望这篇“SpringBoot整合Retry如何实现错误重试”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知...
    99+
    2023-07-05
  • Springboot如何整合Dubbo/ZooKeeper实现SOA案例
    这篇文章给大家分享的是有关Springboot如何整合Dubbo/ZooKeeper实现SOA案例的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、为啥整合 Dubbo 实现 SOADubbo 不单单只是高性能的...
    99+
    2023-05-30
    springboot dubbo soa
  • SpringBoot整合Shiro实现权限控制的代码实现
    1、SpringBoot整合Shiro Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。 1.1、shiro简介 shiro有个核心组...
    99+
    2024-04-02
  • SpringBoot如何整合Springsecurity实现数据库登录及权限控制
    目录第一步第二步是封装一个自定义的类第三步, 我们需要判断密码啦总结我们今天使用SpringBoot来整合SpringSecurity,来吧,不多BB 首先呢,是一个SpringBo...
    99+
    2024-04-02
  • springboot整合rocketmq如何实现分布式事务
    这篇文章给大家分享的是有关springboot整合rocketmq如何实现分布式事务的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1 执行流程(1) 发送方向 MQ 服务端发送消息。(2) MQ Server 将...
    99+
    2023-06-15
  • Springboot如何整合JwtHelper实现非对称加密
    这篇文章主要介绍了Springboot如何整合JwtHelper实现非对称加密,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、生成公私钥对提供两种方法,一种基于命令行中的K...
    99+
    2023-06-29
  • 详解SpringBoot如何实现整合微信登录
    目录1.准备工作1.1 获取微信登录凭证1.2 配置文件1.3 添加依赖1.4 创建读取公共常量的工具类1.5 HttpClient工具类2.实现微信登录2.1 具体流程2.2 生成...
    99+
    2024-04-02
  • 使用SpringBoot如何实现对ElasticSearch进行整合
    这篇文章给大家介绍使用SpringBoot如何实现对ElasticSearch进行整合,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、实体设计:Tutorial.javapublic class Tutorial i...
    99+
    2023-05-31
    springboot elasticsearch
  • 使用springboot如何实现对freemarker进行整合
    这篇文章将为大家详细讲解有关使用springboot如何实现对freemarker进行整合,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。前提:开发工具:idea框架:spring boot、...
    99+
    2023-05-31
    springboot freemarker
  • 使用springboot如何实现对mongodb进行整合
    使用springboot如何实现对mongodb进行整合?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。环境依赖在pom文件引入spring-boot-starter-data-...
    99+
    2023-05-31
    springboot mongodb
  • 使用springboot如何实现对 beatlsql进行整合
    这篇文章给大家介绍使用springboot如何实现对 beatlsql进行整合,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。BeetSql是一个全功能DAO工具, 同时具有hibernate 优点 & Myba...
    99+
    2023-05-31
    springboot beatlsql bea
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作