Учебники

Spring — Обзор JDBC Framework

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

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

Spring JDBC предоставляет несколько подходов и соответственно разные классы для взаимодействия с базой данных. Я собираюсь взять классический и самый популярный подход, который использует класс JdbcTemplate платформы. Это центральный базовый класс, который управляет всеми коммуникациями базы данных и обработкой исключений.

JdbcTemplate Class

Класс JDBC Template выполняет SQL-запросы, обновляет операторы, сохраняет вызовы процедур, выполняет итерацию по ResultSets и извлекает возвращенные значения параметров. Он также перехватывает исключения JDBC и переводит их в общую, более информативную иерархию исключений, определенную в пакете org.springframework.dao.

Экземпляры класса JdbcTemplate являются поточно-ориентированными после настройки. Таким образом, вы можете настроить один экземпляр JdbcTemplate, а затем безопасно внедрить эту общую ссылку в несколько DAO.

Обычной практикой при использовании класса Template JDBC является конфигурирование DataSource в вашем файле конфигурации Spring, а затем добавление зависимостей в этот общий компонент DataSource в ваши классы DAO, и в установщике для DataSource создается JdbcTemplate.

Настройка источника данных

Давайте создадим таблицу базы данных Student в нашей базе данных TEST . Мы предполагаем, что вы работаете с базой данных MySQL, если вы работаете с любой другой базой данных, вы можете соответствующим образом изменить ваши запросы DDL и SQL.

CREATE TABLE Student(
   ID   INT NOT NULL AUTO_INCREMENT,
   NAME VARCHAR(20) NOT NULL,
   AGE  INT NOT NULL,
   PRIMARY KEY (ID)
);

Теперь нам нужно предоставить источник данных для шаблона JDBC, чтобы он мог сам настраиваться для получения доступа к базе данных. Вы можете настроить источник данных в XML-файле с помощью фрагмента кода, как показано в следующем фрагменте кода:

<bean id = "dataSource" 
   class = "org.springframework.jdbc.datasource.DriverManagerDataSource">
   <property name = "driverClassName" value = "com.mysql.jdbc.Driver"/>
   <property name = "url" value = "jdbc:mysql://localhost:3306/TEST"/>
   <property name = "username" value = "root"/>
   <property name = "password" value = "password"/>
</bean>

Объект доступа к данным (DAO)

DAO обозначает объект доступа к данным, который обычно используется для взаимодействия с базой данных. DAO существуют для предоставления средств для чтения и записи данных в базу данных, и они должны предоставлять эту функциональность через интерфейс, через который остальные приложения будут получать к ним доступ.

Поддержка DAO в Spring упрощает совместную работу с такими технологиями доступа к данным, как JDBC, Hibernate, JPA или JDO.

Выполнение операторов SQL

Давайте посмотрим, как мы можем выполнить операцию CRUD (создание, чтение, обновление и удаление) для таблиц базы данных, используя объект шаблона SQL и JDBC.

Запрос целого числа

String SQL = "select count(*) from Student";
int rowCount = jdbcTemplateObject.queryForInt( SQL );

Запрашивать долго

String SQL = "select count(*) from Student";
long rowCount = jdbcTemplateObject.queryForLong( SQL );

Простой запрос с использованием переменной связывания

String SQL = "select age from Student where id = ?";
int age = jdbcTemplateObject.queryForInt(SQL, new Object[]{10});

Запрашивая строку

String SQL = "select name from Student where id = ?";
String name = jdbcTemplateObject.queryForObject(SQL, new Object[]{10}, String.class);

Запрос и возврат объекта

String SQL = "select * from Student where id = ?";
Student student = jdbcTemplateObject.queryForObject(
   SQL, new Object[]{10}, new StudentMapper());

public class StudentMapper implements RowMapper<Student> {
   public Student mapRow(ResultSet rs, int rowNum) throws SQLException {
      Student student = new Student();
      student.setID(rs.getInt("id"));
      student.setName(rs.getString("name"));
      student.setAge(rs.getInt("age"));
      
      return student;
   }
}

Запрос и возврат нескольких объектов

String SQL = "select * from Student";
List<Student> students = jdbcTemplateObject.query(
   SQL, new StudentMapper());

public class StudentMapper implements RowMapper<Student> {
   public Student mapRow(ResultSet rs, int rowNum) throws SQLException {
      Student student = new Student();
      student.setID(rs.getInt("id"));
      student.setName(rs.getString("name"));
      student.setAge(rs.getInt("age"));
      
      return student;
   }
}

Вставка строки в таблицу

String SQL = "insert into Student (name, age) values (?, ?)";
jdbcTemplateObject.update( SQL, new Object[]{"Zara", 11} );

Обновление строки в таблице

String SQL = "update Student set name = ? where id = ?";
jdbcTemplateObject.update( SQL, new Object[]{"Zara", 10} );

Удаление строки из таблицы

String SQL = "delete Student where id = ?";
jdbcTemplateObject.update( SQL, new Object[]{20} );

Выполнение заявлений DDL

Вы можете использовать метод execute (..) из jdbcTemplate для выполнения любых операторов SQL или операторов DDL. Ниже приведен пример использования оператора CREATE для создания таблицы:

String SQL = "CREATE TABLE Student( " +
   "ID   INT NOT NULL AUTO_INCREMENT, " +
   "NAME VARCHAR(20) NOT NULL, " +
   "AGE  INT NOT NULL, " +
   "PRIMARY KEY (ID));"

jdbcTemplateObject.execute( SQL );

Spring JDBC Framework Примеры

Основываясь на вышеизложенных концепциях, давайте проверим несколько важных примеров, которые помогут вам понять использование инфраструктуры JDBC в Spring —

В этом примере объясняется, как написать простое приложение Spring на основе JDBC.

Узнайте, как вызвать хранимую процедуру SQL при использовании JDBC в Spring.