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

Esempio di NamedParameterJdbcTemplate di Spring

Spring fornisce un altro metodo per inserire dati tramite parametri nominati. In questo modo, usiamo il nome invece di ? (domanda). Quindi, è meglio ricordare i dati della colonna.

Semplice esempio di query con parametri nominati

insert into employee values (:id,:name,:salary)

Metodi della classe NamedParameterJdbcTemplate

In questo esempio chiameremo solo il metodo execute della classe NamedParameterJdbcTemplate. La sintassi del metodo è la seguente:

pubic T execute(String sql,Map map,PreparedStatementCallback psc)

Esempio di NamedParameterJdbcTemplate

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;
//costruttori senza argomenti e parametrizzati
//getter e setter
}

EmployeeDao.java

Contiene l'attributo jdbcTemplate e un metodo di salvataggio.

package com.w3codebox;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.PreparedStatementCallback;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import java.util.*;
public class EmpDao {
NamedParameterJdbcTemplate template;
public EmpDao(NamedParameterJdbcTemplate template) {
        this.template = template;
}
public  void save (Emp e){
String query="insert into employee values (:id,:name,:salary)";
Map<String,Object> map=new HashMap<String,Object>();
map.put("id",e.getId());
map.put("name",e.getName());
map.put("salary",e.getSalary());
template.execute(query,map,new PreparedStatementCallback() {
    @Override
    public Object doInPreparedStatement(PreparedStatement ps)
            throws SQLException, DataAccessException {
        return ps.executeUpdate();
    }
});
}
}

applicationContext.xml

DriverManagerDataSource usato per contenere informazioni sul database, come il nome della classe del driver, l'URL di connessione, il nome utente e la password.

Nella classe NamedParameterJdbcTemplate di tipo DriverManagerDataSource c'è un nome datasource di proprietà. Pertanto, dobbiamo fornire un riferimento all'oggetto DriverManagerDataSource per il proprietario DataSource nella classe NamedParameterJdbcTemplate.

Qui, utilizziamo l'oggetto NamedParameterJdbcTemplate nella classe EmployeeDao, quindi lo passiamo al costruttore, ma puoi anche usarne il metodo 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="jtemplate" 
 class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">
<constructor-arg ref="ds"></constructor-arg>
</bean>
<bean id="edao" class="com.w3codebox.EmpDao">
<constructor-arg>
<ref bean="jtemplate"/>
</constructor-arg>
</bean>
</beans>

SimpleTest.java

Questo recupera il Bean da applicationContext.xml e chiama il metodo save.

package com.w3codebox;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
public class SimpleTest {
  public static void main(String[] args) {
    Resource r=new ClassPathResource("applicationContext.xml");
    BeanFactory factory=new XmlBeanFactory(r);
    EmpDao dao=(EmpDao)factory.getBean("edao");
    dao.save(new Emp(23,"sonoo",50000));
  }
}