Spring JDBC之NamedParameterJdbcTemplate
2016-10-12 15:58
489 查看
Spring JDBC提供了两个模板类,JdbcTemplate和NamedParameterJdbcTemplate,JdbcTemplate在给sql传入参数,先是用?代替,在参数很少的情况下,方便识别,但在参数很多的情况下,不方便记忆与维护,使用NamedParameterJdbcTemplate,可以为参数命名,这样方便对参数赋值,提供程序可读性。
1、配置文件
<?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:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<!-- 指定数据源的配置文件 -->
<context:property-placeholder location="classpath:db.properties"/>
<!--
利用 BasicDataSource配置数据源
org.apache.commons.dbcp2.BasicDataSource 需要commons-dbcp2-2.1.1.jar,依赖commons-pool2-2.4.2.jar
-->
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">
<property name="url" value="${jdbc.url}"></property>
<property name="username" value="${jdbc.user}"></property>
<property name="password" value="${jdbc.password}"></property>
<property name="driverClassName" value="${jdbc.driver}"></property>
</bean>
<!-- 配置spring的jdbcTemplate -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!--
配置spring的 namedParameterJdbcTemplate,支持sql语句的具名参数
namedParameterJdbcTemplate的dataSource是以构造函数参数方式配置,而不是属性
-->
<bean id="namedParameterJdbcTemplate"
class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">
<constructor-arg ref="dataSource"></constructor-arg>
</bean>
</beans>
2、TestJDBC.java
import java.util.HashMap;
import java.util.Map;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.namedparam.BeanPropertySqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.jdbc.core.namedparam.SqlParameterSource;
public class TestJDBC {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
JdbcTemplate jdbcTemplate = context.getBean(JdbcTemplate.class);
NamedParameterJdbcTemplate namedParameterJdbcTemplate = context.getBean(NamedParameterJdbcTemplate.class);
@Test
public void testInsertObject() {
// 使用?来处理的话,在参数很多的情况下,需要核对顺序,容易出错,不方便维护
String sql = "insert into student( name,age,grade,sex,email,address ) values (?,?,?,?,?,?)";
Object[] args = new Object[]{"aa", 12, 4, "男", "aa@sina.com.cn", "北京"};
jdbcTemplate.update(sql, args);
}
@Test
public void testInsertObjectByName() {
String sql = "insert into student( name,age,grade,sex,email,address ) values (:name,:age,:grade,:sex,:email,:address)";
// 此处用map为具名参数传递实参
// 优点:根据名称来识别参数,可读性较好,易于维护。
// 缺点:代码量较多
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("name", "bb");
paramMap.put("age", 12);
paramMap.put("grade", 5);
paramMap.put("sex", "男");
paramMap.put("email", "bb@sina.com.cn");
paramMap.put("address", "上海");
namedParameterJdbcTemplate.update(sql, paramMap);
}
/**
* 在具名参数的名称与类属性的名称相同的情况下,可以直接传入实体类对象
* 调用namedParameterJdbcTemplate.update(String sql, SqlParameterSource paramSource)
*/
@Test
public void testInsertObjectByClass() {
String sql = "insert into student( name,age,grade,sex,email,address ) values (:name,:age,:grade,:sex,:email,:address)";
Student student = new Student();
student.setName("cc");
student.setAge(13);
student.setGrade(5);
student.setSex("女");
student.setEmail("cc.sina.com.cn");
student.setAddress("杭州");
// 使用BeanPropertySqlParameterSource这个实现类
// 这个方法相对于update(String sql, Map<String, ?> paramMap),代码量较小,
// 配置MVC架构使用的话,实体类对象作为方法参数传入,代码更为简洁
SqlParameterSource paramSource = new BeanPropertySqlParameterSource(student);
namedParameterJdbcTemplate.update(sql, paramSource);
}
}
1、配置文件
<?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:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<!-- 指定数据源的配置文件 -->
<context:property-placeholder location="classpath:db.properties"/>
<!--
利用 BasicDataSource配置数据源
org.apache.commons.dbcp2.BasicDataSource 需要commons-dbcp2-2.1.1.jar,依赖commons-pool2-2.4.2.jar
-->
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">
<property name="url" value="${jdbc.url}"></property>
<property name="username" value="${jdbc.user}"></property>
<property name="password" value="${jdbc.password}"></property>
<property name="driverClassName" value="${jdbc.driver}"></property>
</bean>
<!-- 配置spring的jdbcTemplate -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!--
配置spring的 namedParameterJdbcTemplate,支持sql语句的具名参数
namedParameterJdbcTemplate的dataSource是以构造函数参数方式配置,而不是属性
-->
<bean id="namedParameterJdbcTemplate"
class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">
<constructor-arg ref="dataSource"></constructor-arg>
</bean>
</beans>
2、TestJDBC.java
import java.util.HashMap;
import java.util.Map;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.namedparam.BeanPropertySqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.jdbc.core.namedparam.SqlParameterSource;
public class TestJDBC {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
JdbcTemplate jdbcTemplate = context.getBean(JdbcTemplate.class);
NamedParameterJdbcTemplate namedParameterJdbcTemplate = context.getBean(NamedParameterJdbcTemplate.class);
@Test
public void testInsertObject() {
// 使用?来处理的话,在参数很多的情况下,需要核对顺序,容易出错,不方便维护
String sql = "insert into student( name,age,grade,sex,email,address ) values (?,?,?,?,?,?)";
Object[] args = new Object[]{"aa", 12, 4, "男", "aa@sina.com.cn", "北京"};
jdbcTemplate.update(sql, args);
}
@Test
public void testInsertObjectByName() {
String sql = "insert into student( name,age,grade,sex,email,address ) values (:name,:age,:grade,:sex,:email,:address)";
// 此处用map为具名参数传递实参
// 优点:根据名称来识别参数,可读性较好,易于维护。
// 缺点:代码量较多
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("name", "bb");
paramMap.put("age", 12);
paramMap.put("grade", 5);
paramMap.put("sex", "男");
paramMap.put("email", "bb@sina.com.cn");
paramMap.put("address", "上海");
namedParameterJdbcTemplate.update(sql, paramMap);
}
/**
* 在具名参数的名称与类属性的名称相同的情况下,可以直接传入实体类对象
* 调用namedParameterJdbcTemplate.update(String sql, SqlParameterSource paramSource)
*/
@Test
public void testInsertObjectByClass() {
String sql = "insert into student( name,age,grade,sex,email,address ) values (:name,:age,:grade,:sex,:email,:address)";
Student student = new Student();
student.setName("cc");
student.setAge(13);
student.setGrade(5);
student.setSex("女");
student.setEmail("cc.sina.com.cn");
student.setAddress("杭州");
// 使用BeanPropertySqlParameterSource这个实现类
// 这个方法相对于update(String sql, Map<String, ?> paramMap),代码量较小,
// 配置MVC架构使用的话,实体类对象作为方法参数传入,代码更为简洁
SqlParameterSource paramSource = new BeanPropertySqlParameterSource(student);
namedParameterJdbcTemplate.update(sql, paramSource);
}
}
相关文章推荐
- Spring+NamedParameterJdbcTemplate+NamedParameterJdbcDaoSupport+JDBC 命名参数支持
- SPRING IN ACTION 第4版笔记-第十章Hitting the database with spring and jdbc-004-使用NamedParameterJdbcTemplate
- springJdbc like模糊查询,Spring namedParameterJdbcTemplate like查询
- spring里使用JDBC(三)NamedParameterJdbcTemplate方式
- springJDBC中NamedParameterJdbcTemplate和JdbcTempl...
- springjdbc NamedParameterJdbcTemplate 数据转换无效
- Spring_23-24使用 JdbcTemplate和JdbcDaoSupport和NamedParameterJdbcTemplate
- Spring JDBC-NamedParameterJdbcTemplate模板类
- JDBC JdbTemplate&NamedParameterJdbcTemplate(Spring工具类)
- SpringJDBC--NamedParameterJdbcTemplate
- Spring学习(十二)-jdbcTemplate和NamedParameterJdbcTemple
- Spring的JdbcTemplate、NamedParameterJdbcTemplate、SimpleJdbcTemplate
- 使用Spring的NamedParameterJdbcTemplate完成DAO操作
- Spring——JdbcTemplate和namedParameterJdbcTemplate
- Spring NamedParameterJdbcTemplate 详解 解决jdbcTemplate中 in 参数的问题
- spring之-jdbcTemplate和NamedParameterJdbcTemplate的小差异
- Spring_使用 NamedParameterJdbcTemplate
- Spring使用NamedParameterJdbcTemplate
- Spring的JdbcTemplate、NamedParameterJdbcTemplate、SimpleJdbcTemplate
- Spring中NamedParameterJdbcTemplate详解