Spring Boot Repository - загрузка DTO прямо из базы данных - PullRequest
0 голосов
/ 08 июля 2020

В своем приложении я использую DTO. Мое текущее решение в псевдокоде таково - работает хорошо:

ResponseEntity<EntityDTO> RestController.get(String uuid){
    EntityDTO dto = Service.get(uuid) {
         Entity entity = Repository.loadEntity(id);
         return EntityDTO.from(entity);
    }
    return ResponseEntity<EntityDTO>( dto , HttpStatus.OK);
} 

Недавно я увидел другое решение без этапа преобразования на уровне обслуживания.

Например, ваша сущность выглядит так:

@Entity
public class Book {
     Long id;
     String title;
     String text;
     .....
}

И текст слишком «тяжелый», чтобы отправить его с дырочной книгой, вы обычно создаете DTO следующим образом:

public class SlimBookDTO {,
     static SlimBookDTO from(Book book) {
           return new SlimBookDTO(book.id, book.title);
     }
     Long id;
     String title;
     .....
}

«Новое» (для меня) Решение чтобы создать только такой интерфейс:

public interface SlimBookDTO {
    Long getId();
    String getTitle();
}

И ваш BookRepository получает новый метод:

@Repository
public interface BookRepository extends JpaRepository<Book , Long> {

    List<SlimBookDTO> findAllByTitle(String title);
}

С этим методом мне больше не нужен уровень обслуживания для прямых запросов . Это обычное дело? У кого-нибудь есть опыт в этом? Есть ли у него какие-то недостатки, которые я не вижу в небольшом приложении, но столкнусь с ними в большем масштабе?

Ответы [ 2 ]

1 голос
/ 08 июля 2020

Это совершенно нормально для простых GET, если объекты достаточно просты, хотя, конечно, вы не можете добавить дополнительные c logi, форматирование или ограничения. Но до тех пор, пока вам не нужно этого делать, это будет работать хорошо.

Я не думаю, что Hibernate анализирует dto, чтобы выбрать только несколько полей, поэтому, если вы хотите улучшить производительность вы можете определять запросы самостоятельно, т.е. @Query("select new com.bla.SlimbookDTO(book.id, book.title) from Book book"), за счет того, что больше не сможете просто использовать автоматически сгенерированные запросы на основе имени метода.

1 голос
/ 08 июля 2020

Это несколько способов возврата данных из базы данных.

  1. Вы создаете DTO, сопоставляете необходимые поля и возвращаете
  2. Другой способ - создать интерфейс, который непосредственно является своего рода Тип возврата из Репозитория. это то, что мы называем проекцией интерфейса JPA.

Для второго вы знаете подробно, перейдя по ссылке ниже https://www.baeldung.com/spring-data-jpa-projections

Проекции интерфейса JPA очень полезно, когда мы запрашиваем две или более сущностей в классе репозитория

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...