Springboot结合DOZER的使用

1.在springboot中的配置

//扫描classpath 下的 *mapping.xml文件 支持多级扫描
	dozer/mini 
	dozer/back

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

2.使用方式


   //使用的时候直接注入
    @Autowired
    protected Mapper mapper;

3.使用列子

例子1.相互拷贝 
com.xx.xx.a类
	private string   name;

	private Integer  age;
com.xxx.xxx.b类
	private string  name;

	private Integer ageTwo;

这两个类的属性名有差异 只要有差异就需要配置

mapping 每一个类的都得使用

	class-a 代表源
	class-b 代表目标类
		filed 代表 类的属性 (字段)
			a:填写源
			b:填写目标

<?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">
    <mapping>
        <class-a>com.xx.xx.a</class-a>
        <class-b>com.xxx.xxx.b</class-b>
        <field>
            <a>age</a>
            <b>ageTwo</b>
        </field>
    </mapping>
</mappings>

4.多层级拷贝

      1.源实体类

CartEntity
public class CartEntity{

    private Float total;

    private Set<GoodsEntity> items = new HashSet<>();

}

GoodsEntity
public class GoodsEntity extends BaseEntity {

    private Integer count;

    private Float fact_total;

    private Float price;

    private Integer checked;

    private GoodsTypeType type;

    private ProductEntity product;

}


ProductEntity
public class ProductEntity extends BaseEntity {

    private String sn;

    private String title;

    private String code;

    private String bigImage;

    private String smallImage;

    private String gallery;
 
    private Float price_retail;
   
    private CategoryEntity category;
}

2.目标实体类

CartVo
public class CartVO {

    //购物车的总价
    private Float total;

    //购物车的商品总数量
    private Integer count;

    //购物车全选/全不选标识
    private Integer checkedAllStatus;

    //购物车的所有商品项
    private List<GoodsVO> items= new ArrayList<GoodsVO>();

    }
GoodsVO
public class GoodsVO {

    private String sn;

    private Integer count;

    private Float total;

    private Float price;

    private String title;

    private String smallImage;

    private Integer checked;
}

   3.多层级xml配置

大体逻辑就是
	把CartEntity 中的items属性拷贝到CartVo中的items属性
	但是两者中的items又是属性尽不相同
	所以进行了多层级配置


<?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">
    <mapping>
        <class-a>com.aui.stock.entity.CartEntity</class-a>
        <class-b>com.aui.stock.controller.mini.vo.CartVO</class-b>
        <field>
		两个字段
            <a>items</a>
            <b>items</b>
	    //两个字段对应的实体类
            <a-hint>com.aui.stock.entity.GoodsEntity</a-hint>
            <b-hint>com.aui.stock.controller.mini.vo.GoodsVO</b-hint>
        </field>
    </mapping>
    //重新创建了一个mapping 用来创建两个字段对应的实体类
    <mapping>
            <class-a>com.aui.stock.entity.GoodsEntity</class-a>
            <class-b>com.aui.stock.controller.mini.vo.GoodsVO</class-b>
           <!-- <field>
                <a>product</a>
                <b>productVO</b>
            </field>-->
	    //这里是 将product中的sn属性赋值给GoodsVO的sn属性
        <field>
            <a>product.sn</a>
            <b>sn</b>
        </field>

        <field>
            <a>product.price_retail</a>
            <b>price</b>
        </field>
        <field>
            <a>product.title</a>
            <b>title</b>
        </field>
        <field>
            <a>product.smallImage</a>
            <b>smallImage</b>
        </field>
      <!--  <field>
            <a>product</a>
            <b>productVo</b>
            <a-hint>com.aui.stock.entity.ProductEntity</a-hint>
            <b-hint>com.aui.stock.controller.mini.vo.ProductVO</b-hint>
        </field>-->
    </mapping>
</mappings>


//调用map方法就可以了
	CartVo cartVo=mapper.map(cartEntity,CartVO.class);

 

注意地方:

//切记不可重复配置类的映射关系 否则会报错 ,这些配置的映射关系 DOZER会重复利用的
//错误信息

Duplicate Class Mapping Found. Source
找到重复的类映射。来源

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值