Spring namedParameterJdbctemplate示例
时间:2020-02-23 14:35:57 来源:igfitidea点击:
在本教程中,我们将看到Spring namedParameterJDBCtemplate。
在以前的帖子中,我们已经看到了Spring Jdbctemplate示例。
命名结果jdebcteremplate用于传递命名参数而不是?
在JDBCTEMPLATE的情况下。
它使代码更易读和可维护。
让我们说你有10个参数,你必须使用10?
要表示参数并在对象[]阵列中相同的顺序传递它,但是在NamedParameterJDBCtemplate的帮助下,它非常容易指定参数。
允许比较JDBCTemplate和NamedParameterJDbctemplate的代码:
jdbctemplate:
public Country addCountry(Country country) {
String query = "insert into Country (id, countryname, population) values (?,?,?)";
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
Object[] args = new Object[] { country.getId(), country.getCountryName(), country.getPopulation() };
int status = jdbcTemplate.update(query, args);
if (status != 0) {
System.out.println("Country saved with country=" + country.getCountryName());
} else
System.out.println("Country save failed with country=" + country.getCountryName());
return country;
}
namedparameterjdbctemplate:
public Country addCountry(Country country) {
String query = "insert into Country (id, countryname, population) values (:id,:countryname,:population)";
Map<String,Object> namedParameters = new HashMap<String,Object> ();
namedParameters.put("id", country.getId());
namedParameters.put("countryname", country.getCountryName());
namedParameters.put("population", country.getPopulation() );
NamedParameterJdbcTemplate namedParamterJdbcTemplate = new NamedParameterJdbcTemplate(dataSource);
int status = namedParamterJdbcTemplate.update(query, namedParameters);
if (status != 0) {
System.out.println("Country saved with country=" + country.getCountryName());
} else
System.out.println("Country save failed with country=" + country.getCountryName());
return country;
}
正如我们所看到的,我们使用:{paramername}来传递参数而不是?
。
例子:
让我们在简单示例的帮助下理解:在MySQL数据库中创建Country表,其中包含以下代码:
CREATE TABLE COUNTRY ( id int PRIMARY KEY NOT NULL, countryName varchar(100) NOT NULL, population int NOT NULL ) ; CREATE UNIQUE INDEX PRIMARY ON COUNTRY(id) ;
我们将使用Country Table进行查询和更新数据库中的值。
允许首先创建我们的bean类country.java
package org.igi.theitroad.model;
/*
* This is our model class and it corresponds to Country table in database
*/
public class Country{
int id;
String countryName;
long population;
public Country() {
super();
}
public Country(int i, String countryName,long population) {
super();
this.id = i;
this.countryName = countryName;
this.population=population;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getCountryName() {
return countryName;
}
public void setCountryName(String countryName) {
this.countryName = countryName;
}
public long getPopulation() {
return population;
}
public void setPopulation(long population) {
this.population = population;
}
@Override
public String toString() {
return "Country [id=" + id + ", countryName=" + countryName + ", population=" + population + "]";
}
}
创建一个DAO类CountryDao.java,它将拥有数据库操作的所有方法。
package org.igi.theitroad.dao;
import java.util.List;
import org.igi.theitroad.model.Country;
public interface CountryDAO {
List getAllCountries();
Country getCountry(int id);
Country addCountry(Country country);
void updateCountry(Country country);
void deleteCountry(int id);
}
使用普通JDBC API创建DAO实现上述接口。
package org.igi.theitroad.dao;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.sql.DataSource;
import org.igi.theitroad.model.Country;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.stereotype.Repository;
@Repository("countryDAONamedJDBC")
public class CoountryDAOImpl implements CountryDAO {
@Autowired
private DataSource dataSource;
@Override
public List getAllCountries() {
String query = "select id, countryname, population from Country";
List countryList = new ArrayList();
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
List<Map<String, Object>> countryRows = jdbcTemplate.queryForList(query);
for (Map<String, Object> countryRow : countryRows) {
Country country = new Country();
country.setId(Integer.parseInt(String.valueOf(countryRow.get("id"))));
country.setCountryName(String.valueOf(countryRow.get("countryName")));
country.setPopulation((Integer)countryRow.get("population"));
countryList.add(country);
}
return countryList;
}
@Override
public Country getCountry(int id) {
String query = "select id,countryname, population from Country where id = :id";
Map<String,Object> namedParameters = new HashMap<String,Object> ();
namedParameters.put("id", id);
NamedParameterJdbcTemplate namedParamterJdbcTemplate = new NamedParameterJdbcTemplate(dataSource);
//int status = namedParamterJdbcTemplate.update(query, namedParameters);
//using RowMapper anonymous class, we can create a separate RowMapper
//for reuse
Country country = namedParamterJdbcTemplate.queryForObject(query, namedParameters, new RowMapper() {
@Override
public Country mapRow(ResultSet rs, int rowNum) throws SQLException {
Country country = new Country();
country.setId(rs.getInt("id"));
country.setCountryName(rs.getString("countryname"));
country.setPopulation(rs.getLong("population"));
return country;
}
});
return country;
}
@Override
public Country addCountry(Country country) {
String query = "insert into Country (id, countryname, population) values (:id,:countryname,:population)";
Map<String,Object> namedParameters = new HashMap<String,Object> ();
namedParameters.put("id", country.getId());
namedParameters.put("countryname", country.getCountryName());
namedParameters.put("population", country.getPopulation() );
NamedParameterJdbcTemplate namedParamterJdbcTemplate = new NamedParameterJdbcTemplate(dataSource);
int status = namedParamterJdbcTemplate.update(query, namedParameters);
if (status != 0) {
System.out.println("Country saved with country=" + country.getCountryName());
} else
System.out.println("Country save failed with country=" + country.getCountryName());
return country;
}
@Override
public void updateCountry(Country country) {
String query = "update Country set countryname=:countryname, population=:population where id=:id";
Map<String,Object> namedParameters = new HashMap<String,Object> ();
namedParameters.put("id", country.getId());
namedParameters.put("countryname", country.getCountryName());
namedParameters.put("population", country.getPopulation() );
NamedParameterJdbcTemplate namedParamterJdbcTemplate = new NamedParameterJdbcTemplate(dataSource);
int status = namedParamterJdbcTemplate.update(query, namedParameters);
if (status != 0) {
System.out.println("Country updated with country=" + country.getCountryName());
} else
System.out.println("No Country found with country=" + country.getCountryName());
}
@Override
public void deleteCountry(int id) {
String query = "delete from Country where id=:id";
Map<String,Object> namedParameters = new HashMap<String,Object> ();
namedParameters.put("id", id);
NamedParameterJdbcTemplate namedParamterJdbcTemplate = new NamedParameterJdbcTemplate(dataSource);
int status = namedParamterJdbcTemplate.update(query, namedParameters);
if (status != 0) {
System.out.println("Country deleted with id=" + id);
} else
System.out.println("No Country found with id=" + id);
}
}
创建ApplicationContext.xml如下所示
<?xml version="1.0" encoding="UTF-8"?> <beans:beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:beans="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd"> <context:annotation-config <beans:bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <beans:property name="driverClassName" value="com.mysql.jdbc.Driver" <beans:property name="url" value="jdbc:mysql://localhost:3306/CountryData" <beans:property name="username" value="root" <beans:property name="password" value="" </beans:bean> <context:component-scan base-package="org.igi.theitroad" </beans:beans>
在连接详细信息上配置数据源,DataSource Bean将在CountryDaoimpl中自动。
创建名为SpringApplicationMain.java的主类如下所示
package org.igi.theitroad.main;
import java.util.List;
import org.igi.theitroad.dao.CountryDAO;
import org.igi.theitroad.model.Country;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class SpringApplicationMain {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
CountryDAO countryDao = (CountryDAO) context.getBean("countryDAONamedJDBC");
Country countryUSA = new Country();
countryUSA.setCountryName("USA");
countryUSA.setPopulation(10000);
Country countryNetherlands = new Country();
countryNetherlands.setCountryName("Netherlands");
countryNetherlands.setPopulation(20000);
Country countryChina = new Country();
countryChina.setCountryName("China");
countryChina.setPopulation(30000);
Country countryBhutan = new Country();
countryBhutan.setCountryName("Bhutan");
countryBhutan.setPopulation(5000);
//Add Country
countryDao.addCountry(countryUSA);
countryDao.addCountry(countryNetherlands);
countryDao.addCountry(countryChina);
countryDao.addCountry(countryBhutan);
//Read
Country countryRead = countryDao.getCountry(3);
System.out.println("Getting country with ID 3::" + countryRead.getCountryName());
//Update
countryRead.setPopulation(40000);
countryDao.updateCountry(countryRead);
//Get All
List countryList = countryDao.getAllCountries();
System.out.println(countryList);
//Delete
countryDao.deleteCountry(4);
System.out.println("We are done with all operations");
}
}
运行上面的程序时,我们将得到以下输出:
Aug 28, 2015 11:01:20 PM org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@71881149: startup date [Sun Aug 28 23:01:20 IST 2015]; root of context hierarchy Aug 28, 2015 11:01:21 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions INFO: Loading XML bean definitions from class path resource [applicationContext.xml] Aug 28, 2015 11:01:21 PM org.springframework.jdbc.datasource.DriverManagerDataSource setDriverClassName INFO: Loaded JDBC driver: com.mysql.jdbc.Driver Country saved with country=USA Country saved with country=Netherlands Country saved with country=China Country saved with country=Bhutan Country Found::Country [id=3, countryName=China, population=30000] Getting country with ID 3::China Country updated with country=China [Country [id=1, countryName=USA, population=10000], Country [id=2, countryName=Netherlands, population=20000], Country [id=3, countryName=China, population=40000], Country [id=4, countryName=Bhutan, population=5000]] Country deleted with id=4 We are done with all operations

