1. Обзор
Spring Data JDBC — это система сохранения, которая не так сложна, как Spring Data JPA. Он не обеспечивает кэш, ленивая загрузка, записи позади, или многие другие функции JPA. Тем не менее, он имеет свой собственный ORM и предоставляет большинство функций, которые мы используем с Spring Data JPA как отображаемые сущности, репозитории, аннотации запросов и JdbcTemplate .
Важно иметь в виду, что Spring Data JDBC не предлагает схему генерации . В результате мы несем ответственность за явное создание схемы.
2. Добавление весенних данных JDBC в проект
Весенние данные JDBC доступны для приложений Spring Boot со стартером зависимости JDBC. Этот стартер зависимости не приносит драйвер базы данных, хотя . Это решение должно быть принято разработчиком. Давайте добавим стартер зависимости для Spring Data JPA:
org.springframework.boot spring-boot-starter-data-jdbc
В этом примере мы используем базу данных H2. Как мы уже упоминали ранее, Spring Data JDBC не предлагает генерации схемы. В таком случае мы можем создать пользовательский схема.sql файл, который будет иметь команды S’L DDL для создания объектов схемы. Автоматически Spring Boot выберет этот файл и будет использовать его для создания объектов базы данных.
3. Добавление сущностей
Как и в случае с другими проектами Spring Data, мы используем аннотации для картографии POJ с таблицами баз данных. В Весенние данные JDBC, организация должна иметь @Id . Весенние данные JDBC использует @Id аннотация для идентификации сущностей.
Как и в случае с Spring Data JPA, Spring Data JDBC использует по умолчанию стратегию именования, которая отображает сущности Java для реляционных таблиц баз данных и атрибуты к именам столбца. По умолчанию имена сущностей и атрибутов Camel Case отображаются на именах таблиц и столбцов. Например, сущность Java под названием Адресная книга отображается в таблице базы данных под названием address_book .
Кроме того, мы можем точно сопоставить объекты и атрибуты с таблицами и столбцами, используя @Table и @Column Аннотации. Например, ниже мы определили сущность, которую мы собираемся использовать в этом примере:
public class Person { @Id private long id; private String firstName; private String lastName; // constructors, getters, setters }
Нам не нужно использовать аннотацию @Table или @Column в Лицо класс. Стратегия именования spring Data JDBC по умолчанию делает все сопоставления неявно между сущностью и таблицей.
4. Объявление репозиториев JDBC
Spring Data JDBC использует синтаксис, похожий на Spring Data JPA. Мы можем создать репозиторий Весенних данных JDBC, расширяя Репозиторий , CrudRepository, или PagingAndSortingRepository интерфейс. Реализуя CrudRepository , мы получаем реализацию наиболее часто используемых методов, таких как сохранить , удалить , и findById , среди прочих.
Давайте создадим репозиторий JDBC, который мы собираемся использовать в нашем примере:
@Repository public interface PersonRepository extends CrudRepository{ }
Если нам нужно иметь функции pagination и сортировки, лучшим выбором было бы расширить PagingAndSortingRepository интерфейс.
5. Настройка репозиториев JDBC
Несмотря на CrudRepository Встроенные методы, мы должны создать наши методы для конкретных случаев.
Теперь давайте настраивать наши ПерсонаРепозиторий с не изменяемый запрос и изменяющий запрос:
@Repository public interface PersonRepository extends CrudRepository{ List findByFirstName(String firstName); @Modifying @Query("UPDATE person SET first_name = :name WHERE id = :id") boolean updateByFirstName(@Param("id") Long id, @Param("name") String name); }
Начиная с версии 2.0, Spring Data JDBC поддерживает методы запроса . То есть, если мы назовем наш метод запроса, включая ключевые слова, например, findByFirstName, Spring Data JDBC будет генерировать объект запроса автоматически.
Однако для изменяемого запроса мы используем @Modifying аннотация для аннотации метода запроса, который изменяет сущность. Кроме того, мы украшаем его @Query аннотация.
Внутри @Query аннотация, мы добавляем нашу команду S’L. Весной данные JDBC, мы пишем запросы в простой S’L. Мы не используем язык запросов более высокого уровня, как JP’L. В результате приложение тесно связано с поставщиком баз данных.
По этой причине также становится все труднее переработать на другую базу данных.
Одна вещь, которую мы должны иметь в виду, что Spring Data JDBC не поддерживает ссылки параметров с индексом чисел . Мы можем ссылаться только на параметры по имени .
6. Заполнение базы данных
Наконец, нам нужно заполнить базу данных данными, которые будут служить для тестирования репозитория Spring Data JDBC, который мы создали выше. Итак, мы собираемся создать сеяющий базу данных, который будет вставлять фиктивные данные. Давайте добавим реализацию сеял базы данных для этого примера:
@Component public class DatabaseSeeder { @Autowired private JdbcTemplate jdbcTemplate; public void insertData() { jdbcTemplate.execute("INSERT INTO Person(first_name,last_name) VALUES('Victor', 'Hugo')"); jdbcTemplate.execute("INSERT INTO Person(first_name,last_name) VALUES('Dante', 'Alighieri')"); jdbcTemplate.execute("INSERT INTO Person(first_name,last_name) VALUES('Stefan', 'Zweig')"); jdbcTemplate.execute("INSERT INTO Person(first_name,last_name) VALUES('Oscar', 'Wilde')"); } }
Как показано выше, мы используем Spring JDBC для выполнения ВСТАВИТЬ Заявления. В частности, Spring JDBC обрабатывает подключение к базе данных и позволяет выполнять команды S’L с помощью JdbcTemplate секунда. Это решение является очень гибким, потому что мы полностью контролируем выполненные запросы.
7. Заключение
Подводя итог, Spring Data JDBC предлагает решение, которое так же просто, как с помощью Spring JDBC – нет никакой магии за ним. Тем не менее, он также предлагает большинство функций, которые мы привыкли использовать Spring Data JPA.
Одним из самых больших преимуществ Spring Data JDBC является повышение производительности при доступе к базе данных по сравнению с Spring Data JPA. Это связано с весенними данными JDBC непосредственно в базу данных . Весенние данные JDBC не содержат большую часть магии весенних данных при запросе базы данных .
Одним из самых больших недостатков при использовании Spring Data JDBC является зависимость от поставщика баз данных. Если мы решим изменить базу данных с MyS’L на Oracle, нам, возможно, придется иметь дело с проблемами, возникающими в связи с базами данных, .
Реализация этого весеннего учебника данных JDBC можно найти более на GitHub .