如果我使用
执行控制器中的代码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类中工作
答案 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。