Spring - Обзор JDBC Framework

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

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

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

Класс JdbcTemplate

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

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

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

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

Создадим таблицу базы данных 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)
);

Теперь нам нужно предоставить DataSource в шаблон JDBC, чтобы он мог настроить себя для получения доступа к базе данных. Вы можете настроить DataSource в 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 Template.

Querying for an integer

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

Querying for a long

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

A simple query using a bind variable

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

Querying for a String

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

Querying and returning an object

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;
   }
}

Querying and returning multiple objects

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;
   }
}

Inserting a row into the table

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

Updating a row into the table

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

Deleting a row from the table

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.

Sr.No. Пример и описание
1 Пример Spring JDBC

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

2 Хранимая процедура SQL весной

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