【问题标题】:Null pointer in Initialising NamedParameterJdbcTemplate beanInitialising NamedParameterJdbcTemplate bean 中的空指针
【发布时间】:2015-03-18 20:43:01
【问题描述】:

如果我在控制器中使用

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 存储库类中

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

这会引发错误

有什么方法可以让名为ParameterJdbcTemplate 的对象在Repository 类中工作

【问题讨论】:

  • 如果我猜的话,在你的 Hibernate Repository 类中,namedParameterJdbcTemplate 看起来并没有被初始化为任何东西,这可能是它抛出空指针的原因......
  • “这会引发错误”对我们没有帮助。向我们展示错误和堆栈跟踪。
  • @ryekayo 如果你不介意,你能举个例子吗

标签: spring hibernate jdbctemplate named-parameters


【解决方案1】:

如果您已经在 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。

【讨论】:

    猜你喜欢
    • 2018-11-05
    • 2014-03-09
    • 2013-03-14
    • 2012-10-02
    • 2014-11-17
    • 1970-01-01
    • 1970-01-01
    • 2013-09-07
    • 2015-11-16
    相关资源
    最近更新 更多