初始化NamedParameterJdbcTemplate bean中的空指针

时间:2015-03-18 20:43:01

标签: spring hibernate jdbctemplate named-parameters

如果我使用

执行控制器中的代码
final DataSource dataSource = (DataSource) getApplicationContext().getBean("dataSource", DataSource.class);
final JdbcTemplate jdbcTemplate = new JdbcTemplate(jdbcDataSource);
final NamedParameterJdbcTemplate namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(jdbcTemplate);

这样可以正常使用

如果我必须在Spring应用程序上下文中获得相同的结果

<bean id="jdbcTemplate"  class="org.springframework.jdbc.core.JdbcTemplate" autowire="constructor" />  

<bean class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate"
      id="namedParameterJdbcTemplate">  
    <constructor-arg ref="jdbcTemplate" />
</bean> 

在Hibernate Repository Class中

private NamedParameterJdbcTemplate namedParameterJdbcTemplate; 
public void setNamedParameterJdbcTemplate(NamedParameterJdbcTemplate namedParameterJdbcTemplate) {  
    this.namedParameterJdbcTemplate = namedParameterJdbcTemplate;  
} 

这会引发错误

有没有办法让对象namedParameterJdbcTemplate在Repository类中工作

1 个答案:

答案 0 :(得分:0)

如果您已在XML中声明了jdbcTemplate,那就是您应该需要的全部内容。

<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
    <property name="dataSource" ref="dataSource" />
</bean>

您需要在JdbcTemplate上设置数据源。

JdbcTemplate自动装入DAO后,您应该可以使用它来创建NamedParameterJdbcTemplate

@Repository
public class DAOImpl implements DAO {
    @Autowired
    private JdbcTemplate jdbcTemplate;

    public void foo() {
        NamedParameterJdbcTemplate namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(jdbcTemplate);
        ....
    }
}

在使用之前,您需要实际创建它的实例。

如果您想使用XML来创建实例,您也可以这样做,但是您需要在由XML创建的实例中进行自动装配。

<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
    <property name="dataSource" ref="dataSource" />
</bean>

<bean id="namedParamterJdbcTemplate" class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">
   <constructor-arg ref="jdbcTemplate"/>
</bean>

然后你只需要在NamedParameterJdbcTemplate中自动装入你的DAO。