Spring+NamedParameterJdbcTemplate+NamedParameterJdbcDaoSupport+JDBC 命名参数支持

来源:互联网 发布:python 2.7支持中文吗 编辑:程序博客网 时间:2024/05/29 03:51

标准的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();

}
原创粉丝点击