Как обновить Dto объект с однотипным условием по всем полям ?
От: HAXT  
Дата: 13.03.19 12:56
Оценка:
Добрый день,
Мне нужно какой-то способ для обновления всех полей (за исключением id) Dto объекта, полученного из базы, полями объекта такого же типа пришедшими из вне.
Применить условие обновления — пришедшие извне поля не равны null. Полей много.
Способ ниже как то громоздок и некрасив.


import static java.util.Objects.isNull;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

import java.util.Collection;

public class UpdateData {

    @Getter
    @Setter
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    class DtoClass {
        private String id;
        private String field01;
        private String field02;
        ...
        private String field99;
    }

    private <T> T updateByNotNullSrc(T g1, T g2){
        return !isNull(g2) ? g2 : g1;
    }

    public void insertOrUpdateDtoClass(Collection<DtoClass> dtoClasses) {
        for (DtoClass dtoClass: dtoClasses) {
            DtoClass dbDtoClass = getByIdFromDB(dtoClass.getId());
            if (isNull(dbDtoClass)) {
                dao.insert(mapper.toJooq(dbDtoClass));
            } else {
                DtoClass updatedDtoClass = DtoClass.builder()
                    .field01(updateByNotNullSrc(dbDtoClass.getField01(), dtoClass.getField01()))
                    .field02(updateByNotNullSrc(dbDtoClass.getField02(), dtoClass.getField02()))
                    ...
                    .field99(updateByNotNullSrc(dbDtoClass.getField99(), dtoClass.getField99()))
                    .build();
                dao.update(mapper.toJooq(updatedDtoClass));
            }
        }
    }

}



Предложите пожалуйста какой-нибудь элегантный способ.
В приложении используется java8 и бибилиотеки Spring, org.mapstruct, Jooq.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.