2015-03-18 18 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。