English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Spring JdbcTemplate учебник

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

Проблемы JDBC API

Проблемы JDBC API таковы:

До и после выполнения запроса нам нужно написать много кода, например, создать соединение, команду, закрыть результат, соединение и т.д. Нам нужно выполнять обработку исключений в логике базы данных. Нам нужно обрабатывать транзакции. Перенос всех этих кодов из одной логики базы данных в другую логику базы данных是一项耗时еое занятие.

Преимущества Spring JdbcTemplate

Spring JdbcTemplate решает все проблемы, связанные с JDBC API. Он предоставляет методы для прямого написания запросов, что экономит много времени и работы.

Методы Spring Jdbc

Фреймворк Spring предоставляет следующие методы для доступа к базе данных JDBC:

JdbcTemplate NamedParameterJdbcTemplate SimpleJdbcTemplate SimpleJdbcInsert и SimpleJdbcCall

Класс JdbcTemplate

Это центральный класс класса поддержки JDBC в Spring. Он отвечает за создание и освобождение ресурсов, таких как создание и закрытие объектов соединений. Поэтому, если вы забудете закрыть соединение, это не вызовет никаких проблем.

Он обрабатывает исключения и предоставляет информацию о сообщениях исключений через org.springframework.dao Помощь классов исключений, определённых в пакете.

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

Давайте посмотрим на методы класса Spring JdbcTemplate.

МетодОписание
public int update(String query)Используется для вставки, обновления и удаления записей.
public int update(String query, Object... args)Для вставки, обновления и удаления записей с помощью PreparedStatement с заданными параметрами.
public void execute(String query)Для выполнения DDL запросов.
public T execute(String sql, PreparedStatementCallback action)Используя callback PreparedStatement для выполнения запроса.
public T query(String sql, ResultSetExtractor rse)Для получения записей с помощью ResultSetExtractor.
public List query(String sql, RowMapper rse)Для получения записей с помощью RowMapper.

Пример использования Spring JdbcTemplate

Предположим, что вы уже создали следующую таблицу в базе данных Oracle10g.

create table employee(
id number(10),
name varchar2(100),
salary number(10)
);

Employee.java

Этот класс содержит три свойства с конструкторами, setter и getter.

package com.w3codebox;
public class Employee {
private int id;
private String name;
private float salary;
//Конструкторы без параметров и с параметрами
//getters and setters
}

EmployeeDao.java

Он содержит атрибут jdbcTemplate и три метода saveEmployee(), updateEmployee и deleteEmployee().

package com.w3codebox;
import org.springframework.jdbc.core.JdbcTemplate;
public class EmployeeDao {
    private JdbcTemplate jdbcTemplate;
    public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
      this.jdbcTemplate = jdbcTemplate;
    }
    public int saveEmployee(Employee e){}
      String query="insert into employee values('"+e.getId()+"','"+e.getName()+"','"+e.getSalary()+"')";
      return jdbcTemplate.update(query);
    }
    public int updateEmployee(Employee e){
      String query="update employee set 
      name='"+e.getName()+"',salary='"+e.getSalary()+"' where id='"+e.getId()+"'";
      return jdbcTemplate.update(query);
    }
    public int deleteEmployee(Employee e){
      String query="delete from employee where id='"+e.getId()+"'";
      return jdbcTemplate.update(query);
    }
}

applicationContext.xml

DriverManagerDataSource для хранения информации о базе данных, например, имя класса драйвера, URL подключения, имя пользователя и пароль.

В классе JdbcTemplate типа DriverManagerDataSource есть метод с именем datasource свойства. Поэтому нам нужно предоставить ссылку на объект DriverManagerDataSource для свойства DataSource в классе JdbcTemplate.

Здесь мы используем объект JdbcTemplate в классе EmployeeDao, поэтому мы передаем его через метод setter, но вы также можете использовать конструктор.

<?xml version="1.0" encoding="UTF-8"?>
<beans
  xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:p="http://www.springframework.org/schema/p"
  xsi:schemaLocation="http://www.springframework.org/schema/beans" 
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
<bean id="ds" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@localhost:1521:xe" />
<property name="username" value="system" />
<property name="password" value="oracle" />
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="ds"></property>
</bean>
<bean id="edao" class="com.w3codebox.EmployeeDao">
<property name="jdbcTemplate" ref="jdbcTemplate"></property>
</bean>
</beans>

Test.java

Этот класс получает Bean из файла applicationContext.xml и вызывает метод saveEmployee(). Вы также можете вызвать методы updateEmployee() и deleteEmployee() через取消注释 кода.

package com.w3codebox;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
public static void main(String[] args) {
  ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
  
  EmployeeDao dao = (EmployeeDao) ctx.getBean("edao");
  int status = dao.saveEmployee(new Employee(102, "Amit", 35000));
  System.out.println(status);
    
  /*int status = dao.updateEmployee(new Employee(102, "Sonoo", 15000));
  System.out.println(status);
  */
    
  /*Employee e = new Employee();
  e.setId(102);
  int status = dao.deleteEmployee(e);
  System.out.println(status);*/
  
}
}