gpt4 book ai didi

spring - JdbcDaoSupport 是做什么用的?

转载 作者:IT老高 更新时间:2023-10-28 13:51:54 26 4
gpt4 key购买 nike

在Spring中,当我们插入数据库时​​,我们可以使用或不使用JdbcDaoSupport。我的问题是,使用它有什么好处,我们应该在什么情况下使用它?

最佳答案

根据这些答案:

JdbcDaoSupportNamedParameterJdbcDaoSupportSimpleJdbcDaoSupport是不必要的,是精神上的灰尘。它们不会保存任何代码行,因为您需要将数据源或模板注入(inject)其中。

我的建议 - 在每个数据源的 XML/类配置中创建模板并重用/注入(inject)它们,因为根据文档,模板是线程安全的:

Once configured, a JdbcTemplate instance is threadsafe. You may want multiple JdbcTemplate instances if your application accesses multiple databases, which requires multiple DataSources, and subsequently multiple differently configured JdbcTemplates.

比较applicationContext.xml:

<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<bean id="jdbcTemplate"
class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">
<constructor-arg ref="dataSource"/>
</bean>

YourDaoImpl.java:

public class YourDaoImpl implements YourDao {

@Autowired
private NamedParameterJdbcTemplate jdbcTemplate;

@Override
public int tableExists(String table) {
String sql = "select count(*) from all_tables"
+ " where table_name = :tbl";
return jdbcTemplate.queryForObject(
sql, new MapSqlParameterSource("tbl", table), Integer.class);
}
}

带有JdbcDaoSupport.java:

public class YourDaoImpl extends NamedParameterJdbcDaoSupport implements YourDao {

@Autowired
public void setDs(DataSource dataSource) {
setDataSource(dataSource);
}

@Override
public int tableExists(String table) {
String sql = "select count(*) from all_tables"
+ " where table_name = :tbl";
return getNamedParameterJdbcTemplate()
.queryForObject(
sql,
new MapSqlParameterSource("tbl", table), Integer.class);
}

}

UPDATE 关于 JdbcTemplate/NamedParameterJdbcTemplate 的无状态(以及线程安全)的官方声明 https://jira.springsource.org/browse/SPR-11478

关于spring - JdbcDaoSupport 是做什么用的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21519940/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com