`

Dozer详解

 
阅读更多

1       如何得到Dozer 工具类jar

1.点击下载:http://sourceforge.net/projects/dozer/files/

 

2.如果使用maven工具的话,在pom.Xml文件中加入:

 

<dependency>

            <groupId>net.sf.dozer</groupId>

            <artifactId>dozer</artifactId>

            <version>5.2.1</version>

</dependency>

加入你的构建路径既可以使用。

2       Dozer使用(不与spring集成下)

2.1  dozer使用分类

根据有无映射文件和文件的多少,有三种方式:

第一种:该方式用于数据类型为基本类型,名称相同的对象映射

Mapper mapper = new DozerBeanMapper();

SourceObject sourceObject = new SourceObject();

DestinationObject destObject = (DestinationObject) mapper.map(sourceObject, DestinationObject.class);

      //  or

DestinationObject destObject = new DestinationObject();

mapper.map(sourceObject, destObject);

第二种:该方式用于数据类型不一致,或者名称不相同或者有级联关系等情况下的映射,该方式可以添加多个配置文件dozerBeanMapping.xmlsomeOtherDozerBeanMappings.xml 

List myMappingFiles = new ArrayList();

myMappingFiles.add("dozerBeanMapping.xml");

//myMappingFiles.add("someOtherDozerBeanMappings.xml");

DozerBeanMapper mapper = new DozerBeanMapper();

SourceObject sourceObject = new SourceObject();

mapper.setMappingFiles(myMappingFiles);

DestinationObject stObject=

(DestinationObject) mapper.map(sourceObject, DestinationObject.class);

第三种:该方式用于数据类型不一致,或者名称不相同或者有级联关系等情况下的映射,配置文件只有一个映射文件叫dozerBeanMapping.xml且在根目录下

Mapper mapper = DozerBeanMapperSingletonWrapper.getInstance();

SourceObject sourceObject = new SourceObject();

DestinationObject destObject = (DestinationObject) mapper.map(sourceObject, DestinationObject.class);

//or

//Mapper mapper = DozerBeanMapperSingletonWrapper.getInstance();

//DestinationObject destObject = new DestinationObject();

mapper.map(sourceObject, destObject);

 

2.2  举例说明:

假设我们现在有一个userDo类,如下:

package ce.dozer;

publicclass User {

      privateintid;

      private String name;

      private String password;

      private Info info;

      publicint getId() {

            returnid;

      }

      publicvoid setId(int id) {

            this.id = id;

      }

      public String getName() {

            returnname;

      }

      publicvoid setName(String name) {

            this.name = name;

      }

      public String getPassword() {

            returnpassword;

      }

      publicvoid setPassword(String password) {

            this.password = password;

      }

      public Info getInfo() {

            returninfo;

      }

      publicvoid setInfo(Info info) {

            this.info = info;

      }

}

一个userVo类,如下:

package ce.dozer;

publicclass UserVO {

      privateintid;

      private String userName;

      private String password;

      private InfoVO info;

      publicint getId() {

            returnid;

      }

      publicvoid setId(int id) {

            this.id = id;

      }

      public String getUserName() {

            returnuserName;

      }

      publicvoid setUserName(String userName) {

            this.userName = userName;

      }

      public String getPassword() {

            returnpassword;

      }

      publicvoid setPassword(String password) {

            this.password = password;

      }

      public InfoVO getInfo() {

            returninfo;

      }

      publicvoid setInfo(InfoVO info) {

            this.info = info;

      }

}

一个性別枚舉类,如下:

package ce.dozer;

publicenum GenderType {

      male,//

      female//

}

一个infoDo类,如下:

package ce.dozer;

import java.util.Date;

publicclass Info {

      privateintid;

      private Date createDate;

      private GenderType gender;

      publicint getId() {

            returnid;

      }

      publicvoid setId(int id) {

            this.id = id;

      }

      public Date getCreateDate() {

            returncreateDate;

      }

      publicvoid setCreateDate(Date createDate) {

            this.createDate = createDate;

      }

      public GenderType getGender() {

            returngender;

      }

      publicvoid setGender(GenderType gender) {

            this.gender = gender;

      }

}

一个infoVo类,如下:

package ce.dozer;

publicclass InfoVO {

      privateintid;

      private String date;

      private Integer gender;

      publicint getId() {

            returnid;

      }

      publicvoid setId(int id) {

            this.id = id;

      }

      public String getDate() {

            return date;

      }

      publicvoid setDate(String date) {

            this.date = date;

      }

      public Integer getGender() {

            returngender;

      }

      publicvoid setGender(Integer gender) {

            this.gender = gender;

      }

}

在给出的示例中我们可以看到userDouserVo 中的字段对应关系

userVo

userDo

不同

idint

idint

 

userNameString

nameString

名称不同

passwordString

passwordString

 

Info(InfoVo)

info (Info)

类型不同

再看看infoDo infoVo 中的字段对应关系

infoVo

infoDo

不同

id(int)

Id(int)

 

createDate(String)

date(Date)

类型不同

gender(Integer)

Gender(GenderType)枚举

类型不同

综合上面的问题我们可以如下解决方式:

(1)字段名称不同映射配置

<mapping>

            <class-a>ce.dozer.User</class-a>

            <class-b>ce.dozer.UserVO</class-b>

            <field>

                  <a>name</a>

                  <b>userName</b>

            </field>

</mapping>

(2)DateString映射配置如下:

<mapping date-format="yyyy-MM-dd">

            <class-a>ce.dozer.User</class-a>

            <class-b>ce.dozer.UserVO</class-b>

            <field>

                  <a>info.createDate</a>

                  <b>info.date</b>

            </field>

</mapping>

(3)自己编写一个类来处理枚举与Integer的转换(假设为util.EnumIntConverter),配置如下:

<configuration>

      <stop-on-errors>true</stop-on-errors>

      <date-format>yyyy-MM-dd</date-format>

      <wildcard>true</wildcard>

      <custom-converters>

            <converter type="util.EnumIntConverter">

                  <class-a>java.lang.Enum</class-a>

                  <class-b>java.lang.Integer</class-b>

            </converter>

      </custom-converters>

</configuration>

<mapping>

      <class-a>ce.dozer.User</class-a>

      <class-b>ce.dozer.UserVO</class-b>

      <field>

            <a>info.gender</a>

            <b>info.gender</b>

      </field>

</mapping>

 

最终的dozerBeanMapping.xml 配置文件:

<?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">

 

      <configuration>

            <stop-on-errors>true</stop-on-errors>

            <date-format>yyyy-MM-dd</date-format>

            <wildcard>true</wildcard>

            <custom-converters>

                  <converter type=" util.EnumIntConverter">

                        <class-a>java.lang.Enum</class-a>

                        <class-b>java.lang.Integer</class-b>

                  </converter>

            </custom-converters>

      </configuration>

      <mapping date-format="yyyy-MM-dd">

            <class-a>ce.dozer.User</class-a>

            <class-b>ce.dozer.UserVO</class-b>

            <field>

                  <a>info.createDate</a>

                  <b>info.date</b>

            </field>

            <field>

                  <a>info.gender</a>

                  <b>info.gender</b>

            </field>

            <field>

                  <a>info.createDate</a>

                  <b>info.date</b>

            </field>

            <field>

                  <a>name</a>

                  <b>userName</b>

            </field>

      </mapping>

</mappings>

 

 

3       spring的集成

3.1  1dozer 要与spring集成需要将dozer交给spring管理,配置如下:

spring-dozer.xml

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

      xmlns:tx="http://www.springframework.org/schema/tx"

      xmlns:aop="http://www.springframework.org/schema/aop"

      xsi:schemaLocation="

      http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd

    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd

    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd"

      default-autowire="byName" default-lazy-init="false">

 

      <bean id="mapper" class="org.dozer.spring.DozerBeanMapperFactoryBean">

            <property name="mappingFiles">

<list>             <value>classpath*:dozer-config/dozerBeanMapping.xml</value>

                  </list>

            </property>

      </bean>

</beans>

3.2  2、当我们的dozer交给了spring管理,当spring容器启动后我们可以将下面的代码添加到用于继承的基类中去:

private Mapper mapper ;

public Mapper getMapper() {

      returnmapper;

}

publicvoid setMapper(Mapper mapper) {

      this.mapper = mapper;

}

3.3  3、在继承者类中就可以直接如下使用:

getMapper().map(sourceObject, DestinationObject.class)

分享到:
评论

相关推荐

    dozer的使用实例

    **Dozer库详解与使用实例** Dozer是一个强大的Java Bean到Java Bean映射库,它极大地简化了对象之间的数据转换工作。与Apache的BeanUtils相比,Dozer提供了更高级别的抽象,灵活性更高,并且能够更好地处理复杂的...

    dozer复杂类型测试类.zip

    《Dozer复杂类型测试类详解》 在Java开发中,数据对象之间的映射是一个常见的需求,比如在服务层与表示层之间,或是不同系统间的数据交换。Dozer是一款强大的Java Bean到Java Bean映射库,它能自动进行复杂的对象...

    dozer5.2 jar包

    **Dozer库详解** Dozer是一个强大的Java对象映射框架,它的核心功能是将一个对象的属性值复制到另一个对象的相应属性上,这在处理对象持久化、服务接口转换、数据展示层与业务逻辑层之间转换等方面非常有用。其主要...

    Dozer 使用

    **Dozer 使用详解** Dozer 是一个开源的 Java 对象到对象映射库,它能够帮助开发者在 Java 应用程序中将一个对象模型映射到另一个对象模型。这个工具在处理复杂的数据转换时非常有用,尤其是在数据绑定、数据复制...

    dozer 架包!!!!!!!!!!

    **描述详解:** "类似struts一的beanutils的拷贝功能,不过更强大些" —— 这句话指出Dozer与Apache Struts的BeanUtils组件有相似性,它们都提供了对象属性之间的复制功能。但是,Dozer在BeanUtils的基础上进行了...

    springboot-dozer-sample:Spring Spring-boot和Dozer Java Libarary的简单示例

    【标题】:Spring Boot与Dozer库整合应用详解 【描述】:在现代Java开发中,Spring Boot以其简洁、高效的特点成为了广泛采用的框架。而Dozer则是一款强大的对象映射库,它可以帮助我们在不同对象之间进行数据转换,...

    分布式框架简介SSM组合+ springmvc+mybatis+shiro+restful+bootstrap

    - **工具类**: Apache Commons、Jackson、Xstream、Dozer、POI等。 - **前端** - **JS框架**: JQuery(轻量级JavaScript库)。 - **CSS框架**: Bootstrap(流行的HTML、CSS、JS框架)。 - **客户端验证**: ...

    JMapper-开源

    **JMapper - 开源软件详解** JMapper是一个强大的开源Java库,它专注于对象之间的映射。在Java开发中,数据对象间的转换是一个常见的任务,例如从数据库查询结果转换为业务对象,或者在不同层次结构之间传递数据。...

Global site tag (gtag.js) - Google Analytics