DO
DO就是一个业务实体对象
DTO
DTO就是一个复合的DO对象,由于业务需要我们需要调用业务A查询数据得到业务对象A,再调用业务B查询数据得到业务对象B然后一系列封装转化得到复合的对象C此时他就是一个DTO,data transfer object 它是一个服务层和服务层以上之间转换的对象。
PO
po持久化对象 一般放在domain 或者 Entry中是一个与数据库表关联的对象,每一个属性都是表中的一个字段。
当业务过于简单时,po ,do,dto,vo并没有什么区别的时候我们也可以直接复用PO
vo
vo就是我们在web的controller层返回的Object,
在接口中这个VO都会被转成Json对象输出,view object。
dozer Mapper的使用
Mapper mapper = new DozerBeanMapper();
BeanA sourceObject = new BeanA();
BeanBF destObject =
mapper.map(sourceObject, BeanBF.class);
jdk8以后 Optional 类的使用
ofNullable() 方法 判断是否null
Optional<User> opt = Optional.ofNullable(user);
orElse()方法,当取值为空返回默认值,如果不为空返回原对象
@Test
public void whenEmptyValue_thenReturnDefault() {
User user = null;
User user2 = new User("anna@gmail.com", "1234");
User result = Optional.ofNullable(user).orElse(user2);
assertEquals(user2.getEmail(), result.getEmail());
}
orElseGet() 用法与 orElse()基本一致
但是optional 对象都包含非空值,两个方法都会返回对应的非空值。不过,orElse() 方法仍然创建了 User 对象。与之相反,orElseGet() 方法不创建 User 对象。
@Test
public void givenPresentValue_whenCompare_thenOk() {
User user = new User("john@gmail.com", "1234");
logger.info("Using orElse");
User result = Optional.ofNullable(user).orElse(createNewUser());
logger.info("Using orElseGet");
User result2 = Optional.ofNullable(user).orElseGet(() -> createNewUser());
}