Похожие презентации:
Высокопроизводительные системы. Лекция 1
1.
Высокопроизводительные системыОгурцов Андрей Юрьевич
Греков Марк Дмитриевич
2022 год
2.
3.
Что получим на выходе?4.
Где взять JDK?5.
JavaBean6.
Bean scope7.
Bean lifecycle8.
Bean lifecycle9.
Component Scan10.
Component Scan11.
Component vs Service vs Repository12.
@Configuration13.
Qualifier vs Primary14.
Qualifier15.
Conditional16.
@Autowired17.
Constructor injection18.
Circular Reference19.
International Students and Scholars Rock20.
21.
Пример контроллера @PathVariable22.
Пример контроллера @RequestBodyПлохой пример!!!
Не передавайте @Entity в @RequestBody
контроллера.
Вместо этого следует использовать DTO,
Который только косвенно связан с
данными. (об этом позже)
23.
Пример контроллера @RequestParamВ запросе @RequestParam c типом List<Long>
будут выглядеть, как ids[]=1,2,3,4,5
@RequestParam могут не передаваться в запросе.
В таком случае мы указываем required=false,
а в переменную будет помещено значение null,
если Spring не сможет найти ожидаемый параметр в запросе.
24.
Пример контроллера на скачивание файла25.
Скачивание файлов при помощи контроллераДля того чтобы вернуть файл из контроллера не
обязательно работать с HttpServletResponse напрямую.
Можно воспользоваться одним из следующих
возвращаемых типов:
• ResponseEntity<Resource> или
• ResponseEntity<InputStreamResource> или
• ResponseEntity<byte[]>
26.
Пример контроллера на загрузку файлаВ дальнейшем из photo можно извлечь информацию при
помощи photo.getInputStream()
27.
НЕ ДЕЛАЙТЕ ТАК28.
НЕ ДЕЛАЙТЕ ТАК29.
НЕ ДЕЛАЙТЕ ТАК30.
Используйте пагинацию на findAll31.
ControllerКонтроллер возвращает
путь к шаблону
Шаблон рендерится при помощи
Thymeleaf
Данные в шаблон попадают через
Model
32.
Valid@Valid UserAccount userAccount;
33.
Validated@Validated(BasicInfo.class) UserAccount userAccount;
34.
35.
Filter36.
ExceptionHandlerЛюбой выкинутый за время работы приложения Exception будет
перехвачен ExceptionHandler и сформирует ответ, который
необходимо вернуть пользователю.
37.
Spring Data JPA38.
Конфигурируем DatasourceВажно чтобы была зависимость spring-data и драйвера postgres
jwt.secret – собственная переменная, которая
была введена для валидации JWT
39.
@Entity40.
@Entity41.
@Entity42.
@Entity43.
@Entity44.
N+1 проблема45.
N+1 как должно быть46.
N+1 проблема47.
N+1 как должно быть48.
N+1 как решить – BatchSize49.
N+1 как решить – SUBSELECT50.
N+1 как решить – JOIN51.
FetchType52.
53.
54.
Entity vs DTO55.
Validation@NotNull, @NotEmpty, @NotBlank, @Null
@Min, @Max, @Length
@Size
@Future, @Past
@Negative, @NegativeOrZero, @Positive, @PositiveOrZero
https://docs.jboss.org/hibernate/stable/validator/r
eference/en-US/html_single/#section-builtinconstraints
56.
JpaRepository57.
JpaRepositoryПри помощи рефлексии `JpaRepository` может составлять
относительно простые запросы.
Стандартные методы:
• .save()
• .findById()
• .findAll()
• .delete()
• .deleteAll()
• .exists()
58.
JpaRepositoryБолее сложные запросы следует составлять при помощи @Query
@Query бывает native и по умолчанию.
native=true обозначает использовать голый
диалект SQL сервера.
Native по умолчанию использует диалект JPA
59.
JpaRepository@Query можно совместить вместе с @Modifying
60.
@Transactional@Transactional заставляет метод выполняться в
рамках одной транзакции. Брошенное
исключение откатит транзакцию.
61.
@Transactionalhttps://sysout.ru/transaction-propagation/
62.
@Transactional63.
@Transactional64.
@Transactional65.
@Transactional66.
@Transactional67.
@Transactional68.
@Transactional69.
@Transactional70.
@PropagationPropagation отвечает на вопросы:
что если два метода аннотированы @Transactional,
и один вызывается из другого?
Будет ли создано две транзакции, или же одна?
Будет ли внутренний метод выбрасывать
исключение, если снаружи нет никакой
транзакции?
71.
@Isolation72.
@Isolation73.
@Isolation74.
@Isolation75.
Liquibase – sql файл76.
Liquibase – changelog-v0_1_0.yaml77.
Liquibase – changelog-v1_0_0.yaml78.
Liquibase – db.changelog-master.yaml79.
Liquibase – application.yaml80.
Testcontainers81.
Testcontainers – base test82.
Testcontainers – junit-jupiter83.
junit-Jupiter – нет миграций84.
Postgres in docker85.
Dockerfile86.
Спасибо за внимание!www.ifmo.ru