dozer简单认识和初步使用

1 篇文章 0 订阅

        由于工程需要使用到java bean的相互转换,自己写的工具类有些问题,从同事那里知道dozer能够很好的解决这个问题。于是用了半天时间学习了一下。由于时间太短,只学会了大概使用。待有时间闲下来之后再仔细研究一番。

        1.dozer可以灵活的处理复杂类型之间的映射,包括双向映射,递归映射。并且可以通过xml文件进行相关配置,可以最大灵活化。

        2.dozer依赖于一些第三方jar包:slf4j.jar,commons-lang.jar,commons-beanutil.jar, commons-loggin.jar

dozer的maven映射为:

        <dependency>
          <groupId>net.sf.dozer</groupId>
          <artifactId>dozer</artifactId>
          <version>5.4.0</version>
        </dependency>

         3.dozer有两种映射方式,但都是生成Mapper实体,本人采用的DozerBeanMapper实现类。

    a.非xml配置型转换。

        private static Mapper mapper;
	
	public static Mapper getMapperInstance(){
		if(mapper==null){
			mapper = new DozerBeanMapper();
		}
		return mapper;
	}
包装的两种转换方法:

/**
	 * bean转换
	 * @param objs 源对象
	 * @param objt 目标对象
	 * @return
	 */
	public static Object Convert(Object objs, Object objt){
		if(objs!=null&&objt!=null){
			Mapper mapper = getMapperInstance();
			mapper.map(objs, objt);
			return objt;
		}
		return null;
	}
	/**
	 * bean转换
	 * @param objs
	 * @param c
	 * @return
	 */
	public static <T> T Convert(Object objs, Class<T> c){
		if(objs!=null&&c!=null){
			Mapper mapper = getMapperInstance();
			return mapper.map(objs, c);
		}
		return null;
	}

对象转换的原因是目标对象可以已经实例化,并且有一些属性拥有初值,而且在转换过程中,源对象不会对这些属性有干扰。而如果直接可以由源对象生成目标对象的情况,直接使用类转换(Class<T> c)即可。


b.xml配置的转换。

因为有些时候需要转换的两个对象之间字段可能不一致,但却是对应的。这时候需要用xml来指定源对象的哪个属性对应目标对象的哪个属性,好进行转换。

xml配置的mapper:

        private static Mapper xmlMapper;
	
	public static Mapper getMapperInstanceByXML(){
		if(xmlMapper==null){
			List<String> files = new ArrayList<String>();
		        files.add("dozer.xml");
			xmlMapper = new DozerBeanMapper(files);
		}
		return xmlMapper;
	}
同样转换方法有两种:

/**
	 * xml bean转换
	 * @param objs
	 * @param objt
	 * @return
	 */
	public static Object ConvertByXML(Object objs, Object objt){
		if(objs!=null&&objt!=null){
			Mapper mapper = getMapperInstanceByXML();
			mapper.map(objs, objt);
			return objt;
		}
		return null;
	}
	/**
	 * xml bean转换
	 * @param objs
	 * @param c
	 * @return
	 */
	public static <T> T ConvertByXML(Object objs, Class<T> c){
		if(objs!=null&&c!=null){
			Mapper mapper = getMapperInstanceByXML();
			return mapper.map(objs, c);
		}
		return null;
	}

对于第二种xml配置的方式,附上一份简单的模版:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mappings PUBLIC "-//DOZER//DTD MAPPINGS//EN"  
"src/main/resources/conf/dozerbeanmapping.dtd">  
<mappings>
	<!-- config rules -->
	<configuration>
		<stop-on-errors>false</stop-on-errors>
		<date-format>yyyy-MM-dd HH:mm</date-format>
		<wildcard>true</wildcard>
	</configuration>
	<!-- Bean mapping for converting -->
	<mapping>
		<!-- source -->
		<class-a>com.test.sourceTest</class-a>
		<!-- destination -->
		<class-b>com.test.destinationTest</class-b>
		<!-- field -->
		<field>
			<a>name</a>
			<b>changeName</b>
		</field>
                <field>
			<a>date</a>
			<b>dateStr</b>
		</field>

        </mapping>
</mappings>

 首先,该配置文件需要dtd文件: 
dozerbeanmapping.dtd
此xml告诉dozer工具sourceTest类的name和date分别对应destination类的changeName和dateStr;转换过程中会直接对应转换。

而且在sourceTest类中的date属性为Date对象,由于

<date-format>yyyy-MM-dd HH:mm</date-format>
的原因,会转换成destination类中的相应格式的String类型dateStr。怎样,dozer够强大吧!


由于时间有限,还未做更深入的学习。等下来深入学习后再分享交流吧。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值