Java. Менторинг за чашкой кода

@channel_java_cup_code
Spring Data — это не только JPA Когда слышишь Spring Data, то первая мысль обычно: «А, ну это Spring Data JPA». Но JPA — только один из проектов семейства Spring Data. Давайте разберёмся, что вообще туда входит. 🔹 Spring Data JPA Самый распространённый вариант для реляционных БД. Работаем с PostgreSQL, MySQL и другими SQL-БД через JPA. public interface UserRepository extends JpaRepository<User, Long> { } Под капотом обычно используется Hibernate. 🔹 Spring Data JDBC Тоже работает с реляционными БД, но подход гораздо проще. Здесь нет полноценного ORM со всей магией Hibernate: - нет persistence context в стиле JPA; - нет lazy loading как в JPA; - нет dirty checking; - меньше скрытого поведения. Получаем более прямолинейную работу с SQL и сущностями. public interface UserRepository extends CrudRepository<User, Long> { } Хороший вариант, когда возможности полноценного ORM просто не нужны. 🔹 Spring Data R2DBC А вот здесь уже интереснее, так как R2DBC предназначен для реактивной работы с реляционными БД. Например: WebFlux ↓ R2DBC ↓ PostgreSQL В отличие от классического JDBC, модель рассчитана на неблокирующее взаимодействие. Используется там, где всё приложение действительно построено вокруг reactive stack. Просто заменить JDBC на R2DBC ради «ускорения» приложения — не хорошая идея. Также Spring Data работает и с NoSQL: 🔹 Spring Data MongoDB — MongoDB 🔹 Spring Data Redis — Redis 🔹 Spring Data Elasticsearch — Elasticsearch 🔹 Spring Data Cassandra — Cassandra 🔹 Spring Data Neo4j — графовая БД Neo4j И это далеко не весь список, но самое важное — не выучить все названия, а нужно понимать, какой уровень абстракции вы выбираете. Например: Spring Data │ ┌─────────────┴─────────────┐ ↓ ↓ Реляционные БД NoSQL │ │ ┌────┼────┐ ┌──────┼──────┐ ↓ ↓ ↓ ↓ ↓ ↓ JPA JDBC R2DBC MongoDB Redis Cassandra JPA — мощная объектно-реляционная модель. JDBC — более простой и прямолинейный подход к реляционной БД. R2DBC — реактивный неблокирующий доступ к реляционным БД. MongoDB / Redis / Cassandra и т.д. — уже другие типы хранилищ и соответствующие модели работы с ними. И тут часто возникает путаница: JPA ≠ Hibernate ≠ Spring Data JPA JPA — спецификация. Она описывает, как должна работать ORM-модель в Java. Hibernate — реализация JPA. То есть конкретный ORM, который реализует эту спецификацию. Spring Data JPA — абстракция Spring поверх JPA, которая сильно упрощает работу с репозиториями. Условно: Ваш код ↓ Spring Data JPA ↓ JPA ↓ Hibernate ↓ JDBC ↓ PostgreSQL Поэтому фраза: «Мы используем Spring Data»ещё почти ничего не говорит о том, как именно приложение работает с данными. Нужно уточнить: Spring Data JPA, JDBC, R2DBC, MongoDB, Redis...?И вот это уже хороший вопрос: «Почему в вашем проекте выбран именно Spring Data JPA, а не JDBC?» Тут уже придётся объяснять не аннотации, а компромиссы выбранного подхода.
Если у вас установлено приложение,
вы можете сразу перейти в канал