1.Dozer的简单应用
分析多层架构的J2EE系统,经常存在JavaBean直接的拷贝。比如在DAO层,我们通过POJO取得业务层需要的数据,将这些数据传递给Service层的VO。POJO与VO就存在典型的值拷贝。还有就是Webservice,客户端调用Webservice,也存在将大量返回值映射到相应的JavaBean里。
典型的解决方案就是手动拷贝,弊端很明显,代码中充斥大量Set Get方法,真正的业务被埋藏于值的拷贝之中。另一种方案就是使用BeanUtils,但BeanUtils不够灵活,有时候不得不手动拷贝。
对于这种重复没有实际意义的拷贝的解决方案是 :Dozer 一把JavaBean利器
Dozer支持简单类型 复杂类型的双向递归映射。
如何使用呢? 类似BeanUtils 很简单,如果两个javaBean之间,属性名相同,类型为基本类型,那么下面代码就OK了,基本没有学习曲线。
Mapper mapper = new DozerBeanMapper();
DestinationObject destObject = mapper.map(sourceObject, DestinationObject.class);
or
DestinationObject destObject = new DestinationObject();
mapper.map(sourceObject, destObject);
2.Dozer的复杂应用
如何使用Dozer映射复杂类型,如:
1. 数据类型不一致。
2. 级联映射。
3. 自定义映射。
Dozer对于基本类型之间转换是不用配置的,比如Sting <------>Integer ,只要属性名称相同就Ok了。
而常用的Date与String映射配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<mappings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://dozer.sourceforge.net E:\dozer\dozer-5.0-src\dozer-5.0\src\site\resources\schema\beanmapping.xsd"
xmlns="http://dozer.sourceforge.net">
<mapping date-format="MM-dd-yyyy">
<class-a>net.blogjava.vincent.pojo.CustomerPo</class-a>
<class-b>net.blogjava.vincent.vo.CustomerVo</class-b>
<field>
<a>birthday</a>
<b>dateOfBirth</b>
</field>
</mapping>
指明 CustomerPo里面的birthday对应CustomerVo里面的dateOfBirth.并且是Date与String之间双向映射。
对于属性名称不一致,也仅仅需要一个配置文件,如下:
<?xml version="1.0" encoding="UTF-8"?>
<mappings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://dozer.sourceforge.net E:\dozer\dozer- 5.0-src\dozer-5.0\src\site\resources\schema\beanmapping.xsd"
xmlns="http://dozer.sourceforge.net">
<mapping>
<class-a>net.blogjava.vincent.pojo.CustomerPo</class-a>
<class-b>net.blogjava.vincent.vo.CustomerVo</class-b>
<field>
<a>type</a>
<b>transferType</b>
</field>
</mapping>
指明 CustomerPo里面的type 对应CustomerVo里面的transferType.
而对以级联,比如CustomerPo里面的一个属性映射为CustomerVo里么一个对象的属性,下面的配置就可以了
<mapping>
<class-a>net.blogjava.vincent.pojo.CustomerPo</class-a>
<class-b>net.blogjava.vincent.vo.CustomerVo</class-b>
<field>
<a>type</a>
<b>transferType.type</b>
</field>
</mapping>
上面其实就是Dozer基本用法,也涵盖了大多数应用场景,可见基本不需要写代码,仅仅一个配置文件搞定,简单吧。
而对于更个性化的映射,就需要写代码了, 比如在CustomerPo中的into类型的transferId ,映射CustomerVo String 类型transferType, 如果transferId =1 对应transferType=“immediateTranfer” 如果transferId =2 对应transferType=“scheduleTransfer” 反之亦然。就要写一个Customer的Map了, 如下:
import org.dozer.CustomConverter;
public class CustomerMap implements CustomConverter {
public Object convert(Object destinationFieldValue,
Object sourceFieldValue, Class<?> destinationClass,
Class<?> sourceClass) {
Object returnVale = null;
if(sourceFieldValue!=null){
if(sourceFieldValue instanceof Integer ){
if((Integer)sourceFieldValue == 1){
returnVale ="immediateTranfer";
}
if((Integer)sourceFieldValue == 2){
returnVale ="scheduleTransfer";
}
}
if(sourceFieldValue instanceof String ){
if("immediateTranfer".equals(destinationFieldValue)){
returnVale =1;
}
if("scheduleTransfer".equals(destinationFieldValue)){
returnVale =2;
}
}
}
return returnVale;
}
}
然后在配置文件配置就Ok了 如下:
<mapping>
<class-a>net.blogjava.vincent.pojo.CustomerPo</class-a>
<class-b>net.blogjava.vincent.vo.CustomerVo</class-b>
<field custom-converter="net.blogjava.vincent.mapUtil.CustomerMap">
<a>type</a>
<b>transferType</b>
</field>
</mapping>
下面就是一个完整的配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<mappings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://dozer.sourceforge.net E:\dozer\dozer-5.0-src\dozer-5.0\src\site\resources\schema\beanmapping.xsd"
xmlns="http://dozer.sourceforge.net">
<mapping date-format="yyyy-MM-dd">
<class-a>net.blogjava.vincent.pojo.UserInfo</class-a>
<class-b>net.blogjava.vincent.vo.UserInfoVo</class-b>
<field>
<a>colleage.name</a>
<b>schoolName</b>
</field>
</mapping>
<mapping>
<class-a>net.blogjava.vincent.pojo.CustomerPo</class-a>
<class-b>net.blogjava.vincent.vo.CustomerVo</class-b>
<field custom-converter="net.blogjava.vincent.mapUtil.CustomerMap">
<a>type</a>
<b>transferType</b>
</field>
</mapping>
</mappings>
分享到:
相关推荐
**Dozer:JavaBean到JavaBean的映射神器** Dozer是Java开发中的一款强大工具,主要用于Java Bean之间的数据映射。它简化了在不同对象模型之间传递数据的过程,尤其在处理复杂对象结构时,其功能显得尤为重要。Dozer...
《Dozer:强大的JavaBean映射工具》 在Java开发中,对象间的属性映射是一项常见的任务,尤其是在数据转换和接口交互中。Apache的BeanUtils是这类问题的一个基础解决方案,但当面临更复杂的映射需求时,其功能就显得...
在实际开发中,通常需要将数据库中的每一列映射到JavaBean的属性上,以便于在业务逻辑中进行数据操作。而此工具则能自动完成这一过程,支持MySQL和Oracle两大主流关系型数据库。 1. **MySQL与Oracle支持**: - ...
javabean生成xml.xml转换成javabean的工具类
在"WEB应用技术 JavaBean技术应用"的实验中,我们学习了如何利用JavaBean来处理用户登录的简单场景。 首先,创建了一个名为`index.jsp`的页面,这是用户交互的入口。在这个页面中,我们定义了一个HTML表单,用户...
2. **映射属性**:解析后的JSON对象会被映射到JavaBean的属性上。这个过程需要考虑到JSON键(key)与JavaBean字段(field)之间的对应关系。例如,JSON键"username"可能对应JavaBean的私有变量`private String ...
JavaBean到XML映射文件工具是一种实用程序,它允许开发者将Java对象(即JavaBean)的数据转换成XML格式的文件,反之亦然。这个工具在处理数据交换、持久化或配置文件时非常有用,特别是在使用像Castor这样的框架时。...
通过本实验,我们学习了如何使用JavaBean技术实现购物车系统的业务逻辑,包括商品信息的封装、工具JavaBean的实现和购物车逻辑的实现。这些技术可以广泛应用于Web应用开发,提高开发效率和质量。
在Java Web开发中,"Servlet + JavaBean + JSP"是一种常见的MVC(Model-View-Controller)架构模式的应用,用于构建动态Web应用程序。在这个模式中,Servlet扮演控制器的角色,处理用户请求,JavaBean作为模型,封装...
【标题】"解析sql文件并且生成Javabean的工具类" 这个标题涉及到的是一个编程工具,它能够处理SQL文件并根据其中的数据结构生成对应的JavaBean对象。在软件开发中,尤其是涉及到数据库操作时,这样的工具能显著提高...
在实际应用中,使用这类工具不仅可以减少代码量,还能减少因人工错误导致的bug。同时,它使得开发者有更多的时间专注于业务逻辑和创新,而不是重复性的编码工作。在团队协作中,使用统一的代码生成工具也能保证代码...
在Java开发中,将JSON对象映射为Java对象(通常称为JavaBean)是常见的操作,这能够方便地处理和操作数据。针对这个需求,有一些工具可以自动将JSON转换为对应的JavaBean类,大大提高了开发效率。 标题中的“json...
javaBean的综合应用讲解,这是对Bean的学习的深入讲解。是深入理解baan的很好资料。
值JavaBean和工具JavaBean的区别 JavaBean是一种特殊的Java类,它具有封装数据和提供公共方法的功能。在Java开发中,JavaBean通常被分为两类:值JavaBean和工具JavaBean。理解这两者的区别对于Java开发者来说是非常...
3、增强字符串格式化工具,使得自动拼接字符串的应用场景更多。 4、测试数据库连接、生成Bean文件、精确匹配的更多等按钮都使用了异步线程进行处理, 这样界面不再会被卡住了,点了这些按钮以后还可以同时对界面...
Dozer是一个JavaBean的映射工具,用于在Java对象之间转换属性值。它类似于Apache的BeanUtils,但Dozer特别优化了复杂对象的映射,可以将一个对象的字段映射到另一个对象,这在分层架构中尤其有用。在分层架构中,...
在给定的压缩包"nutz生成javabean工具.zip"中,我们可以看到一个名为"NutzCodematic-master"的项目,这很可能是Nutz提供的一个用于自动化生成JavaBean类的工具。下面我们将详细探讨Nutz Codematic及其在Java开发中的...
本工具“mysql, sqlserver, Oracle 数据库生成javabean小工具”正是为了解决开发者手动编写javabean时的繁琐工作,它能够自动根据数据库中的表结构生成对应的javabean文件。 1. **数据库连接**: 工具支持三种主流...
总的来说,"javabean工具类.rar"提供了一个实用的工具,帮助开发者快速生成符合规范的JavaBean类,简化了数据库驱动的Java应用程序的开发流程。通过支持多种常见数据库,这个工具在不同的项目环境中都能发挥其价值。