2015-03-18 60 views
0

如果我空指针正开始是NamedParameterJdbcTemplate豆

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; 
} 

此抛出错误

有什么办法使物体在NamedParameterJdbcTemplate的repository类

+0

如果我在猜测,在你的Hibernate Repository类中,它看起来不像namedParameterJdbcTemplate被初始化为任何东西,这可能是为什么它抛出一个空指针...... – ryekayo 2015-03-18 20:49:17

+0

“这抛出错误”并不能帮助我们。告诉我们错误和堆栈跟踪。 – skaffman 2015-03-18 21:05:08

+0

@ryekayo如果你不介意,你可以用一个例子来展示 – 2015-03-18 22:43:50

回答

0

工作如果你已经声明了jdbcTemplate在你的XML,这是所有你应该需要。

<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。