1、什么是DTO、VO、BO、PO、DO、POJO
pojo(domain/entity)一般定义实体类,实体类又被分为VO、BO、 PO、 DTO、DO;通过各层POJO的使用,有助于提高代码的可读性和可维护性。
2、阿里巴巴Java开发规范
DO(Data Object):此对象与数据库表结构一一对应,通过 DAO 层向上传输数据源对象。
DTO(Data Transfer Object):数据传输对象,Service 或 Manager 向外传输的对象。
BO(Business Object):业务对象,由 Service 层输出的封装业务逻辑的对象。
AO(ApplicationObject):应用对象,在Web层与Service层之间抽象的复用对象模型, 极为贴近展示层,复用度不高。
VO(View Object):显示层对象,通常是 Web 向模板渲染引擎层传输的对象。
Query:数据查询对象,各层接收上层的查询请求。注意超过 2 个参数的查询封装,禁止使用 Map 类来传输。
3、各类实体类之间的转换
3.1 IDEA插件完成转换(Simple Object Copy)
之间去idea去搜索
使用方法
alt+insert
3.2 MapStruct转换
MapStruct是一个Java注释处理器,用于生成类型安全的bean映射类
与动态映射框架相比,MapStruct具有以下优点:
- 通过使用普通方法调用(settter/getter)而不是反射来快速执行
- 编译时类型安全性:只能映射相互映射的对象和属性,不能将order实体意外映射到customer DTO等。
- 如果有如下问题,编译时会抛出异常
3.1 映射不完整(并非所有目标属性都被映射)
3.2 映射不正确(找不到正确的映射方法或类型转换) - 可以通过freemarker定制化开发
与BeanUtils的区别
性能优于beanUtils
原因:Mapstruct是在java文件到class这一步帮我们实现了转换方法,即做了预处理,提前编译好文件;BeanUtils转换的原理是使用的反射,反射的效率相对来说是低的,因为jvm优化在这种场景下有可能无效,所以在对性能要求很高或者经常被调用的程序中,尽量不要使用。我们平时在研发过程中,也会遵守这个原则,非必要,不反射。
使用方法
1.导入依赖
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>1.5.0.Final</version>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>1.5.0.Final</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
</dependency>
2.整合spring简单使用
注意注解mapper的包
3.3BeanUtils
org.springframework.beans.BeanUtils
由springframework提供
源码如下