一个强大易用的java bean之间属性复制框架--Dozer介绍
博客专区 > zgw06629 的博客 > 博客详情
一个强大易用的java bean之间属性复制框架--Dozer介绍
zgw06629 发表于2年前
一个强大易用的java bean之间属性复制框架--Dozer介绍
  • 发表于 2年前
  • 阅读 6265
  • 收藏 27
  • 点赞 0
  • 评论 0

腾讯云 十分钟定制你的第一个小程序>>>   

Dozer is a Java Bean to Java Bean mapper that recursively copies data from one object to another. Typically, these Java Beans will be of different complex types.

更多内容见:http://dozer.sourceforge.net/documentation/about.html

两个简单示例:

  1. map --> bean
    假设由request得到了页面参数map,想将其转为领域对象–Product。
    Product有如下几个属性:

    private Long id;
    private String name;
    private String description;


    代码:

    // map--> bean
    Map<String,Object> map = Maps.newHashMap();
    map.put("id", 10000L);
    map.put("name", "么么哒");
    map.put("description", "金色外壳");

    DozerBeanMapper mapper = new DozerBeanMapper();
    Product product = mapper.map(map, Product.class);
    assertThat(product.getId()).isEqualTo(10000L);
    assertThat(product.getName()).isEqualTo("么么哒");
    assertThat(product.getDescription()).isEqualTo("金色外壳");

        2. bean --> DTO

       为了解耦的缘故,会为给第三方提供的接口创建独立的dto对象,而不是复用已有的对应数据库表的实体对象(Entity)。故需要在它们两者之间传输数据。

       如现在定义了一个DTO对象,但属性名并不匹配Product对象中的属性名(可能是为了避免冲突或歧义),如下所示:

       private long productId;
       private String productName;
       private String desc;

       这时简单的在相关属性上加一个注解即可,如下所示:

      @Mapping("id")

       private long productId;

       @Mapping("name")

      private String productName;
      @Mapping("description")
      private String desc;

      完整代码示例见:

      Product product = new Product();
      product.setId(10001L);
      product.setName("Hero");
      product.setDescription("黑色外壳");
      DozerBeanMapper mapper = new DozerBeanMapper();
      ProductDTO productDTO = mapper.map(product, ProductDTO.class);
      assertThat(productDTO.getProductId()).isEqualTo(10001L);
      assertThat(productDTO.getProductName()).isEqualTo("Hero");
      assertThat(productDTO.getDesc()).isEqualTo("黑色外壳");


标签: Dozer
共有 人打赏支持
粉丝 14
博文 54
码字总数 30471
×
zgw06629
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: