English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Spring JdbcTemplate È un potente meccanismo per connettersi al database ed eseguire query SQL. Utilizza internamente l'API JDBC, ma risolve molti problemi dell'API JDBC.
I problemi dell'API JDBC sono i seguenti:
Prima e dopo l'esecuzione della query, dobbiamo scrivere molto codice, ad esempio creare connessioni, istruzioni, chiudere i set di risultati, connessioni, ecc. Dobbiamo eseguire il codice di gestione delle eccezioni sulla logica del database. Dobbiamo gestire le transazioni. Copiare tutto questo codice da una logica di database a un'altra logica di database è un lavoro che richiede molto tempo.
Spring JdbcTemplate risolve tutti i problemi dell'API JDBC. Fornisce metodi per scrivere direttamente le query, risparmiando così molto tempo e lavoro.
Spring Framework fornisce i seguenti metodi per l'accesso al database JDBC:
JdbcTemplate NamedParameterJdbcTemplate SimpleJdbcTemplate SimpleJdbcInsert e SimpleJdbcCall
È la classe centrale del supporto JDBC di Spring. È responsabile della creazione e della liberazione delle risorse, come la creazione e la chiusura degli oggetti di connessione, ecc. Pertanto, se dimenticate di chiudere la connessione, non causerebbe alcun problema.
Gestisce le eccezioni e fornisce messaggi di eccezione tramite org.springframework.dao Aiuto delle classi di eccezione definite nel pacchetto.
Possiamo eseguire tutte le operazioni di database con la classe JdbcTemplate, ad esempio l'inserimento, l'aggiornamento, la cancellazione dal database e la ricerca dei dati.
Vediamo i metodi della classe JdbcTemplate di Spring.
Metodo | Spiegazione |
public int update(String query) | Utilizzato per l'inserimento, l'aggiornamento e la cancellazione dei record. |
public int update(String query, Object... args) | Utilizzato per inserire, aggiornare e eliminare record utilizzando PreparedStatement con parametri dati. |
public void execute(String query) | Utilizzato per eseguire query DDL. |
public T execute(String sql, PreparedStatementCallback action) | Esegui la query utilizzando il callback PreparedStatement. |
public T query(String sql, ResultSetExtractor rse) | Utilizzato per ottenere record utilizzando ResultSetExtractor. |
public List query(String sql, RowMapper rse) | Utilizzato per ottenere record utilizzando RowMapper. |
Supponiamo che tu abbia già creato la seguente tabella nel database Oracle10g.
create table employee( id number(10), name varchar2(100), salary number(10) );
Employee.java
Questa classe contiene 3 attributi con costruttore, setter e getter.
package com.w3codebox; public class Employee { private int id; private String name; private float salary; //nessun costruttore con parametri e costruttore con parametri //getters and setters {}
EmployeeDao.java
Esso contiene un attributo jdbcTemplate e tre metodi saveEmployee(), updateEmployee e 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 utilizzato per contenere informazioni sul database, come il nome della classe del driver, l'URL di connessione, il nome utente e la password.
La classe JdbcTemplate di tipo DriverManagerDataSource ha un nome datasource le proprietà. Pertanto, dobbiamo fornire una riferimento all'oggetto DriverManagerDataSource per il属性 di DataSource nella classe JdbcTemplate.
In questo contesto, abbiamo utilizzato l'oggetto JdbcTemplate nella classe EmployeeDao, quindi lo abbiamo passato tramite il metodo setter, ma puoi anche usarne il costruttore.
<?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
Questa classe recupera il Bean dal file applicationContext.xml e chiama il metodo saveEmployee(). Puoi anche chiamare i metodi updateEmployee() e deleteEmployee() cancellando i commenti dal codice.
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);*/ {} {}