1.BeanUtils的使用
BeanUtils.copyProperties(A, B) //将B的值映射给A
要求:映射的字段名称要一致
具体的方法及理论见 https://blog.youkuaiyun.com/megustas_jjc/article/details/53525026 大神写的相当详细
2.dozer的使用
对于映射工具来说,dozer是个相当令人满意的选择,它可以灵活地处理复杂类型之间的映射。不但可以进行简单的属性映射、复杂的类型映射、双向映射、递归映射等,并且可以通过XML配置文件进行灵活的配置。
首先就是添加依赖
<!-- https://mvnrepository.com/artifact/net.sf.dozer/dozer-spring -->
<dependency>
<groupId>net.sf.dozer</groupId>
<artifactId>dozer-spring</artifactId>
<version>5.5.1</version>
</dependency>
① 项目中使用dozer
如果要映射的两个对象有完全相同的属性名,则只需要直接使用Dozer的API即可:
Mapper mapper = new DozerBeanMapper();
DestinationObject destObject = mapper.map(sourceObject, DestinationObject.class);
但是在实际映射当中,往往会存在属性名不相同的映射。这时候只需要添加配置文件告诉Dozer怎么映射即可。在现实应用中最好不要每次映射对象时都创建一个Mapper实例来工作,这样会产生不必要的开销。如果不使用IoC容器(Spring)来管理,则最好将Mapper定义为单例模式。
配置文件如下:
首先在<mapper>中写入两个相互映射的类<class-a>和<class-b>,<field>标签里定义要映射的特殊属性。<a>里是<class-a>的字段,相应的<b>是<class-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">
<configuration>
<date-format>MM/dd/yyyy HH:mm</date-format>
</configuration>
<!-- date-format="MM-dd-yyyy HH:mm:ss" -->
<mapping>
<class-a>dozer.jqq.BeanDO.UserDO</class-a>
<class-b>dozer.jqq.BeanVO.UserVO</class-b>
<field>
<a>create_time</a>
<b>createTime</b>
<!-- <a-hint>create_time</a-hint>
<b-hint>createTime</b-hint> -->
</field>
<field>
<a>password</a>
<b>passaword</b>
</field>
</mapping>
</mappings>
将dozerBeanMapping.xml配置文件放在resources根目录下:
DozerBeanMapper mapper = new DozerBeanMapper();
UserVO vo = mapper.map(userDO, UserVO.class);
如若配置文件放在了其他位置,则需要添加如下几行代码:
List myMapperFile = new ArrayList();
myMapperFile.add("****/dozer-mapper.xml");
mapper.setMappingFiles(myMapperFile);
②Spring整合Dozer
首先,在spring下创建spring-dozer.xml,我将配置文件写在了dozer文件夹里。Dozer与Spring整合,只要声明一个DozerBeanMapperFactoryBean,然后将所有的dozer映射配置文件作为属性注入到mappingFiles,DozerBeanMapperFactoryBean会自动载入这些规则。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"
default-autowire="byName" default-lazy-init="false">
<bean id="mapper" class="org.dozer.spring.DozerBeanMapperFactoryBean">
<property name="mappingFiles">
<list>
<!-- 把Dozer映射文件引入 -->
<value>classpath*:dozer/dozer-mapping.xml</value>
</list>
</property>
</bean>
</beans>
然后在代码中直接写如下代码即可:
Mapper mapper = DozerBeanMapperSingletonWrapper.getInstance();
mapper.map(userDO, userVO);