您觉得本文档还缺少什么内容?可以自己补充~

本项目的对象转换工具使用开源工具dozer, 并在dozer 原生的基础上,对一些不有好的地方进行包装。详见: bc-util-dozer-starter

什么是dozer ?

Dozer是Java Bean到Java Bean映射器,它以递归方式将数据从一个对象复制到另一个对象。通常,这些Java Bean将具有不同的复杂类型。

Dozer支持简单属性映射,复杂类型映射,双向映射,隐式显式映射以及递归映射。这包括映射还需要在元素级别进行映射的集合属性。 注意:dozer 目前不支持集合之间的转换 ,需要自己进行处理,稍后我会提供一个简单的工具类.

为什么选他?

  1. 基于API、注解、XML,可以实现优雅的对象装换
  2. 实现相同对象、相同字段转换
  3. 实现不同对象,不同字段名的转换
  4. 实现不同对象,不同类型的字段转换

缺点

性能差! 经过比较,Hutool的BeanUtil进行转换时,性能大大好于dozer,但却没dozer怎么灵活,所以大多数场景都会使用BeanUtil,在BeanUtil不能满足时,才会选择dozer.

使用

  • 引入依赖: bc-util-dozer-starter
<dependency>
    <groupId>com.becypress.product</groupId>
    <artifactId>bc-util-dozer-starter</artifactId>
</dependency>
  • 注入bean
@Autowired
private DozerUtils dozer;
  • 使用
RoleSaveDTO data = RoleSaveDTO.builder().build();
Role role = dozer.map(data, Role.class);
  • 高级用法: (以下用法,BeanUtil貌似无法实现,所以使用dozer)
// 参考 MenuController#myRouter
List<Menu> list = menuService.findVisibleMenu(group, userId);
List<VueRouter> treeList = dozer.mapList(list, VueRouter.class);

// 其中 Menu 对象和 VueRouter对象中部分字段名不一致, 可以通过配置文件配置转换规则

// biz.dozer.xml 配置如下
<mapping date-format="yyyy-MM-dd HH:mm:ss">
    <class-a>com.becypress.product.authority.entity.auth.Menu</class-a>
    <class-b>com.becypress.product.authority.dto.auth.VueRouter</class-b>
    <field>
        <a>label</a>
        <b>meta.title</b>
    </field>
    <field>
        <a>label</a>
        <b>name</b>
    </field>
    <field>
        <a>icon</a>
        <b>meta.icon</b>
    </field>
</mapping>

results matching ""

    No results matching ""