Java DataBase Connectivity: мощь чистого SQL
Этот пост для тех, кто устал писать запросы в JDBC template и хочет мощи, которая есть в Spring Data JPA-репозиториях, но не может/не готов использовать JPA. А также для тех, кто устал разрабатывать сущности с JPA/Hibernate и хочет более душевного и близкого «к железу» SQL. Как ни странно, но для решения этих противоречивых с первого взгляда вопросов есть один способ — Spring Data JDBC.
Что такое Spring Data JDBC?
Для начала: • Это не ORM в классическом понимании; • Но это полноценный Spring Data Repository; • Не имеет никакого отношения к JPA, но схож по своей природе; • По сути, JdbcTemplate, обёрнутый в Spring Data; • Скорее, это MyBatis, и, кстати, поддержка его имеется.
Итак, рассмотрим пример репозитория на Spring Data. Как и все Spring Data репозитории, они начинаются с доменного класса:
@Table("persons") public class Person { @Id private int id; @Column("name") private String name; // Конструкторы, геттеры и сеттеры (хотя сеттеры по документации не нужны) }
Обратите внимание на аннотацию
Рассмотрим непосредственно репозиторий в лучших традициях Spring Data:
interface PersonRepository extends CrudRepository<Person, Long> {}
Собственно, всё! Предлагаю читателям самостоятельно убедиться, что этого достаточно для определения информации маппинга полей.
А как писать запросы?
Этим и занимается аннотация @Query, которую мы можем использовать и здесь:
interface PersonRepository extends CrudRepository<Person, Long> { @Query("SELECT p.id, p.name FROM person p") public List<Person> getAll(); }
Пользуйтесь мощью чистого SQL!
Хочется узнать больше? Задавайте вопросы в комментариях!