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. |