标准的JDBC API对命名参数并不支持,Spring对其进行了扩展
配置文件配置的时候,需要一个JdbcTemplate或者DataSource。
如下:
<bean id="namedParameterJdbcTemplate" class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">
<constructor-arg ref="jdbcTemplate"></constructor-arg>
</bean>
或者:
<bean id="namedParameterJdbcTemplate" class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">
<constructor-arg ref="dataSource"></constructor-arg>
</bean>
示例代码如下:
ListableBeanFactory context = new ClassPathXmlApplicationContext(
"beans.xml");
//GenericBeanFactoryAccessor dbfa = new GenericBeanFactoryAccessor(context);
NamedParameterJdbcTemplate jdbc = (NamedParameterJdbcTemplate) context.getBean("namedParameterJdbcTemplate");
Map<String,String> map = new HashMap<String,String>();
map.put("name", "李度");
SqlParameterSource sps = new MapSqlParameterSource(map);
String sql = "select oid from porder where name=:name";
System.out.println(jdbc.queryForList(sql, sps));
Person person = new Person();
person.setName("李度");
sps = new BeanPropertySqlParameterSource(person);
sql = "select oid from porder where name=:name";
System.out.println(jdbc.queryForList(sql, sps));
其中:
MapSqlParameterSource支持Map形式
BeanPropertySqlParameterSource支持Bean的形式。
他们都继承自SqlParameterSource接口。
下面介绍NamedParameterJdbcDaoSupport支持类。
继承关系为:NamedParameterJdbcDaoSupport和SimpleJdbcDaoSupport继承自JdbcDaoSupport 而JdbcDaoSupport继承自DaoSupport。
JdbcDaoSupport 上面已经介绍过,他暴露了getJdbcTemplate()方法,用于获取JdbcTemplate.
NamedParameterJdbcDaoSupport简化了NamedParameterJdbcTemplate模板类的使用。
下面是:NamedParameterJdbcDaoSupportImpl继承了NamedParameterJdbcDaoSupport。 在DI容器中的配置情况。
需要传入一个:JdbcTemplate或DataSource
<bean id="namedParameterJdbcDaoSupportImpl" class="com.spring.test.NamedParameterJdbcDaoSupportImpl">
<property name="jdbcTemplate" ref="jdbcTemplate"></property>
</bean>
或者:
<bean id="namedParameterJdbcDaoSupportImpl" class="com.spring.test.NamedParameterJdbcDaoSupportImpl">
<property name="dataSource" ref="dataSource"></property>
</bean>
NamedParameterJdbcDaoSupportImpl这个类的示例:
public class NamedParameterJdbcDaoSupportImpl extends
NamedParameterJdbcDaoSupport {
public void test(){
Person person = new Person();
person.setName("李度");
SqlParameterSource sps = new BeanPropertySqlParameterSource(person);
String sql = "select oid from porder where name=:name";
System.out.println(this.getNamedParameterJdbcTemplate().queryForList(sql, sps));
}
}
测试类为:
public static void main(String[] args) {
ListableBeanFactory context = new ClassPathXmlApplicationContext(
"beans.xml");
//GenericBeanFactoryAccessor dbfa = new GenericBeanFactoryAccessor(context);
NamedParameterJdbcDaoSupportImpl jdbc = (NamedParameterJdbcDaoSupportImpl) context.getBean("namedParameterJdbcDaoSupportImpl");
jdbc.test();