1. 程式人生 > >用dozer實現兩對象之間的復制

用dozer實現兩對象之間的復制

另一個 opener new param factory tcl tap map port

1。引包

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

2.建一個xml文件,copy_dozer.xml 其中如果有字段沒有對上,可以用field

<?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.banksteel.openerp.customer.vo.CmCustomerVO
		</class-a>
		<class-b>com.banksteel.openerp.customer.api.entity.CmCustomer
		</class-b>
	</mapping>

      <!-- 財務管理模塊 -->
      <mapping>
        <class-a>com.banksteel.openerp.finance.vo.FmReceivablesRecordVO
        </class-a>
        <class-b>com.banksteel.openerp.finance.api.entity.FmReceivablesRecord
        </class-b>
        <field>
          <a get-method="getApplyTimeToLong">applyTime</a>
          <b get-method="getApplyTimeToString">applyTime</b>
        </field>
      </mapping>

</mappings>

3.建一個公共方法類 BeanFactory.java

package com.banksteel.openerp.commons.dozer;

import java.beans.PropertyDescriptor;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;

import org.apache.commons.beanutils.PropertyUtilsBean;
import org.dozer.DozerBeanMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class BeanFactory {
	private static DozerBeanMapper dozerBeanMapper;
	private static Logger logger = LoggerFactory.getLogger(BeanFactory.class);
	static {
		dozerBeanMapper = new DozerBeanMapper();
          // 這裏加上要引人的xml文件 String[] pathes = { "admin-dozer.xml", "customer-dozer.xml", "facade-dozer.xml", "finance-dozer.xml", "log-dozer.xml", "mbpm-dozer.xml", "mobile-dozer.xml", "purchase-dozer.xml", "quartz-dozer.xml", "repertory-dozer.xml", "sale-dozer.xml", "system-dozer.xml", }; try { for (String path : pathes) { InputStream inputStream = null; try { inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("dozer/" + path); } catch (Exception e) { logger.error("dozer文件不存在:" + path); } if (inputStream != null) { dozerBeanMapper.addMapping(inputStream); inputStream.close(); } } } catch (Exception e) { e.printStackTrace(); } } public static void convert(Object source, Object target) { dozerBeanMapper.map(source, target); } public static Map<String, Object> bean2Map(Object obj) { Map<String, Object> params = new HashMap<String, Object>(0); try { PropertyUtilsBean propertyUtilsBean = new PropertyUtilsBean(); PropertyDescriptor[] descriptors = propertyUtilsBean.getPropertyDescriptors(obj); for (int i = 0; i < descriptors.length; i++) { String name = descriptors[i].getName(); if (!"class".equals(name)) { params.put(name, propertyUtilsBean.getNestedProperty(obj, name)); } } } catch (Exception e) { e.printStackTrace(); } return params; } }

 4.復制。把一個對象裏面的值復制到另一個對象裏面

BeanFactory.convert(cmCustomerVO, cmCustomer);

  

 

  

用dozer實現兩對象之間的復制