StrutsCatalog系列(4)--DTO实现

/**
作者:Puneet Agarwal
译者:Rifoo Technology(http://www.rifoo.com
时间:2005-11-09
备注:转载请保留以上声明
**/

问题 

  • 在一个J2EE应用中,我们通常要在WEB层和EJB层之间传输业务数据。数据传输对象 (DTO)通常是我们所采用的一种方式,而不是去重复的频繁调用一个实体bean的方法。在Struts中,Action-Form是一种DTO实现的形式之一。它扮演着一个中间仓库的角色,用来存储客户端的数据以及EIS层的相关业务数据。 但是在不同的层之间传递ActionForm是一种糟糕的做法。

一种方法是将Form Bean中的值以方法参数的形式传到一个SessionBean。这种方式没有任何技术上的错误。但是我们不得不频繁的修改SessionBean的方法甚至是一些需要改变的接口定义。所以我们推荐一种更好的方法是copy数据到一个DTO中,然后传递这个相同的bean到EJB层。理想状态下,这个DTO应该传到SessionBean (session façade), 在SessionBean中会和EntityBean直接打交道。

最佳实践

  • 在一个分层的系统中,一个层中的类应该只和同层的其他类进行交互,或者和邻近层中的类进行交互。这个意味着Action-Form类应该只被用在表现层和控制层中。 我们可以手动的组装这个传输对象,或者编写一个实用方法来透明的处理它。

有两种可行的方法将数据组装到DTO中:

  • 创建一个自己的"Value或Transfer Object",将Action-Form中的数据copy到这个对象里来,这里要注意数据类型的转换。这种方式使得我们反复的重复类似的操作。 

  • 实用 Commons包中的"BeanUtil" 类。 它使用JAVA反射技术来实现。

   根据调查,程序员们多数使用第一种方式,这种方式使得每次都是重复的劳动,让编码工作变得枯燥无味。在copy的时候,要手工处理DTO setter方法里的数据类型转换,将它们转为合适的业务类型。 例如,一个Form bean接收到来自客户层的所有String类型的字段,但是在它们上执行任何业务操作之前,要将它们转换成不同的JAVA类型或原始类型。  

我们能够使用BeanUtils类中的copyProperties()方法来处理。该方法可以复制一个bean中的数据到另一个bean,这个目标bean是以Value或传输对象形式提供的变量名。它可以减轻我们在数据类型转换上的负担,它能够透明的在源bean和目标bean之间转换字段类型。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用Mybatis-Plus进行DTO的操作可以通过以下步骤实现: 1. 首先,确保已经引入了Mybatis-Plus的依赖,可以在pom.xml文件中添加以下依赖: ```xml <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>最新版本</version> </dependency> ``` 2. 创建DTO(Data Transfer Object)对象,用于封装查询结果。DTO对象通常包含与数据库表字段对应的属性,并提供相应的getter和setter方法。 3. 在Mapper接口中使用@Mapper注解标识该接口为Mybatis的Mapper接口,并使用@MapperScan注解扫描Mapper接口所在的包。 4. 在Mapper接口中定义查询方法,可以使用Mybatis-Plus提供的查询方法,也可以自定义SQL语句进行查询。在查询方法的参数中使用@Param注解指定参数名称,以便在SQL语句中引用。 5. 在Service层中调用Mapper接口的查询方法,获取查询结果。 6. 将查询结果封装到DTO对象中,并返回给前端或其他需要的地方。 总结起来,使用Mybatis-Plus进行DTO的操作主要包括创建DTO对象、定义Mapper接口的查询方法、在Service层调用查询方法并封装结果到DTO对象中。这样可以实现使用Mybatis-Plus进行DTO的操作。 #### 引用[.reference_title] - *1* *3* [Mybatis-plus做连接查询的插件Mybatis-plus-join](https://blog.csdn.net/m0_67400973/article/details/126463252)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Mybatis-Plus 开发提速器:mybatis-plus-generator-ui 你确定不了解一下?](https://blog.csdn.net/weixin_44421461/article/details/129483755)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值