SpringBoot集成Dozer

一、什么是Dozer?
Dozer是一种Java Bean到Java Bean的映射器,递归地将数据从一个对象复制到另一个对象,它是一个强大的,通用的,灵活的,可重用的和可配置的开源映射框架。
说白点就是dozer是一个能把实体和实体之间进行转换的工具.只要建立好映射关系.就像是ORM的数据库和实体映射一样。

比如:代码层与层之间javabean转换, 如dao层PO转前端VO,一个持久实体 包含 密码 字段,不好频繁的把实体的密码去掉再给到 前端. 需要 po -> vo。
(但是以上操作需要很多的set,所以这时就需要用到Dozer了。)

Dozer做对象转换有什么特点

默认属性Mapping,即如果属性名称一样, 就不需要显示配置,Dozer会自动处理。
自动做类型转换,即如果两个属性名称一样,即使类型不一样,在Dozer可理解范围内,帮你处理得妥妥的。Dozer可理解的类型范围非常广,这会极大的提升程序员的生产力
不必担心中间的null property,遇到null property,Dozer会把对应的所有属性全部设置为null,而不会抛NullPointerExeception。 

二、SpringBoot整合Dozer
如何不会创建SpringBoot项目请参考SpringBoot整合
1、首先引入依赖

<!--dozer -->
        <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>

2、在resource下创建dozer-conf.xml

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

    <mapping>
        <!--对应的实体和要转换成的VO-->
        <class-a>com.vtech.quotation.pojo.Users</class-a>
        <class-b>com.vtech.quotation.vo.UsersVO</class-b>
        <!--对应要转换的属性名.<a>和<class-a>对应,其它同理-->
        <field>
            <a>userId</a>
            <b>Id</b>
        </field>
    </mapping>
</mappings>

也可以在实体中使用@Mapping注解。
下面列出我的实体和VO例子:
Users.java

import lombok.Data;
import org.dozer.Mapping;
@Data
public class Users {
    @Mapping("Id") 
    private BigDecimal userId;
    private String userName;
    private String password;
    private String firstName;
    private String lastName;
}

@Mapping(“Id”) 对应的以下UsersVO的Id

UsersVO.java

import lombok.Data;
import java.math.BigDecimal;
@Data
public class UsersVO {
    private BigDecimal Id;
    private String userName;
    private String password;

3、创建GeneralConvertor.java

import org.dozer.Mapper;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;

/**
 * dozer 转换器
 */
@Component
public class GeneralConvertor {


    @Resource
    Mapper mapper;

    /**
     * List  实体类 转换器
     *
     * @param source 原数据
     * @param clz    转换类型
     * @param <T>
     * @param <S>
     * @return
     */
    public <T, S> List<T> convertor(List<S> source, Class<T> clz) {
        if (source == null) return null;
        List<T> map = new ArrayList<>();
        for (S s : source) {
            map.add(mapper.map(s, clz));
        }
        return map;
    }

    /**
     * Set 实体类 深度转换器
     *
     * @param source 原数据
     * @param clz    目标对象
     * @param <T>
     * @param <S>
     * @return
     */
    public <T, S> Set<T> convertor(Set<S> source, Class<T> clz) {
        if (source == null) return null;
        Set<T> set = new TreeSet<>();
        for (S s : source) {
            set.add(mapper.map(s, clz));
        }
        return set;
    }

    /**
     * 实体类 深度转换器
     *
     * @param source
     * @param clz
     * @param <T>
     * @param <S>
     * @return
     */
    public <T, S> T convertor(S source, Class<T> clz) {
        if (source == null) return null;
        return mapper.map(source, clz);
    }

    public void convertor(Object source, Object object) {
        mapper.map(source, object);
    }

    public <T> void copyConvertor(T source, Object object) {
        mapper.map(source, object);
    }


}

(注意:该类需要添加@Component,让它能被扫描到)

4、测试

@Service
public class UsersService{
    @Resource
    GeneralConvertor convertor;
    
    @Override
    public List<UsersVO> findAll() {
        List<Users> list = usersMapper.findAll();
        //关键代码
        List<UsersVO> usersVO =convertor.convertor(list,UsersVO.class);
        return usersVO ;
    }
}
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值