При работе с базой данных, использующей старый старый 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.