Выбрать главу

Таблица 2.3 Свойства включения/отключения кэширования шаблонов

Шаблоны

Свойство включения кэширования

FreeMarker

spring.freemarker.cache

Groovy Templates

spring.groovy.template.cache

Mustache

spring.mustache.cache

Thymeleaf

spring.thymeleaf.cache

По умолчанию, все эти свойства имеют значение true, чтобы включить кэширование.  Можно отключить кэширование для выбранного шаблонизатора, установив для его свойства cache значение false.  Например, чтобы отключить кэширование Thymeleaf, добавьте следующую строку в application.properties:

spring.thymeleaf.cache=false

Единственная загвоздка заключается в том, что перед развертыванием приложения в рабочей среде необходимо удалить эту строку (или задать для нее значение true). Одним из вариантов является установка свойства в профиле. (Мы поговорим о профилях в главе 5.)

Гораздо более простой вариант-использовать DevTools Spring Boot, как мы решили сделать в главе 1. Среди множества полезных функций, предлагаемых DevTools во время разработки, он отключит кэширование для всех библиотек шаблонов, но отключит себя (и, следовательно, включит кэширование шаблонов) при развертывании приложения.

ИТОГ

Spring предлагает мощный веб-фреймворк под названием Spring MVC, который может быть использован для разработки веб-интерфейса для Spring-приложения.

Spring MVC - базовые аннотации, позволяющие создать методы обработки запросов с аннотациями, такие как @RequestMapping, @GetMapping, и @PostMapping.

Большинство методов обработки запросов завершаются возвращением логического имени представления, например шаблона Thymeleaf, на который передается запрос (вместе с любыми данными модели).

Spring MVC поддерживает Java Bean Validation API и реализаций Validation API такие как Hibernate Validator.

View контроллеры могут быть использованы для обработки HTTP-запросов GET, для которых не требуется модели данных или обработки.

В дополнение к Thymeleaf Spring поддерживает различные параметры просмотра, включая FreeMarker, Groovy Templates и Mustache.

 

 

 

Spring in Action Covers Spring 5.0 перевод на русский. Глава 3

3. Работа с данными

Эта глава охватывает:

Используя Spring JdbcTemplate

Вставка данных посредством SimpleJdbcInsert

Объявление -JPA - репозиториев с данными Spring

Большинство приложений предлагают больше, чем просто красивый интерфейс. Хотя пользовательский интерфейс может обеспечить взаимодействие с приложением, именно данные, которые он представляет и хранит, отличают приложения от статических веб-сайтов.

В приложении Taco Cloud необходимо поддерживать информацию об ингредиентах, тако и заказах. Без базы данных для хранения этой информации, приложение не сможет развиваться дальше, чем то, что вы разработали в главе 2.

В этой главе вы добавите сохраняемость данных в приложение Taco Cloud. Вы начнете с использования поддержки Spring для JDBC (Java Database Connectivity) для устранения шаблонного кода.  Затем вы переработаете репозитории данных для работы с JPA (Java Persistence API), исключив еще больше кода.

3.1 Чтение и запись данных с помощью JDBC

На протяжении десятилетий реляционные базы данных и SQL занимали лидирующие позиции в области сохранения данных. Несмотря на то, что в последние годы появилось много альтернативных типов баз данных, реляционная база данных по-прежнему является лучшим выбором для хранилища данных общего назначения и вряд ли будет узурпирована в ближайшее время.

Когда дело доходит до работы с реляционными данными, у разработчиков Java есть несколько вариантов. Два наиболее распространенных варианта это JDBC и JPA. Spring поддерживает оба из них с абстракциями, что делает работу с JDBC или JPA проще, чем было бы без Spring. В этом разделе мы сосредоточимся на том, как Spring поддерживает JDBC, а затем рассмотрим поддержку Spring для JPA в разделе 3.2.

Поддержка Spring JDBC внедрена в класс JdbcTemplate. JdbcTemplate предоставляет средство, с помощью которого разработчики могут выполнять операции SQL в реляционной базе данных без всех церемоний и шаблонов которые обычно требуется при работе с JDBC.

Чтобы понять, для чего нужен JdbcTemplate, давайте посмотрим на примере, как выполнить простой запрос в Java без JdbcTemplate.

листинг 3.1 Запрос к базе данных без JdbcTemplate

@Override

public Ingredient findOne(String id) {

 Connection connection = null;

 PreparedStatement statement = null;

 ResultSet resultSet = null;

 try {

   connection = dataSource.getConnection();

   statement = connection.prepareStatement(

     "select id, name, type from Ingredient");

   statement.setString(1, id);

   resultSet = statement.executeQuery();

   Ingredient ingredient = null;

   if(resultSet.next()) {

    ingredient = new Ingredient(