jdbcdaosupport.java,JdbcDaoSupport的作用是什么?

In Spring, when we are inserting into the database, we can use JdbcDaoSupport or not. My question is, what are the advantages in using it and in which circumstances we should use it?

解决方案

According to these answers:

JdbcDaoSupport, NamedParameterJdbcDaoSupport, SimpleJdbcDaoSupport are unnecessary and are mental dust. They doesn't save any line of code because you need to inject data-source or template into.

What I recommend - to create templates in XML/class config per data source and reuse/inject them as templates are thread safe according to docs:

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.

Compare applicationContext.xml:

class="org.apache.commons.dbcp.BasicDataSource"

destroy-method="close">

class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">

and 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);

}

}

with 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 Official statement about stateless (and so thread safety) of JdbcTemplate/NamedParameterJdbcTemplate here https://jira.springsource.org/browse/SPR-11478

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值