千家信息网

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

发表于:2024-11-30 作者:千家信息网编辑
千家信息网最后更新 2024年11月30日,这篇文章将为大家详细讲解有关Springboot如何整合Dozer实现深度复制,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。DozerDozer是一种Java Be
千家信息网最后更新 2024年11月30日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安全错误 数据库的锁怎样保障安全 软件开发进隆平高科 关于网络安全知识心得体会 网络安全是一项政治 软件开发哪家大学比较专一 富文本表情保存到数据库 维护网络安全需要什么措施 vb加载数据库记录 什么是软件开发模式 电力监控系统网络安全十六字方针 晒图服务软件开发的立项目的 杭州引擎网络技术有限公司 域服务器如何管理用户 河北省关于网络安全工作部署 郑州工控软件开发怎么样 软件开发为什么要定金 客户机服务器模式的正确工作顺序 郴州学电脑软件开发培训 硕士查重数据库包括本科论文吗 计算机和软件开发是啥 湾区网络安全大会 海南宜信网络技术有限公司 敏捷软件开发的项目过程 数据库复制表结构代码 netcoreweb服务器性能 中国公路桥梁基础数据库 考可兰数据库如何使用 vr旅游软件开发 常见的网络安全防范措施 我的世界天迹服务器 力控与数据库远程连接
0