在Spring文档中,推荐的使用JdbcTemplate的方法是为你在其中使用它的每个类创建new
模板...
public class JdbcCorporateEventDao implements CorporateEventDao {
private JdbcTemplate jdbcTemplate;
public void setDataSource(DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
}
我想知道,这个解决方案的优势在于将jdbctemplate
定义为上下文中的单例并直接将其注入Dao
public class JdbcCorporateEventDao implements CorporateEventDao {
@Autowired
private JdbcTemplate jdbcTemplate;
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
}
答案 0 :(得分:3)
来自JdbcTemplate的类级文档:
* Can be used within a service implementation via direct instantiation
* with a DataSource reference, or get prepared in an application context
* and given to services as bean reference.
要么是好的。这里我有一个大型应用程序(50个DAO,100个并发用户),并且在spring上下文中定义了整个应用程序的一个jdbcTemplate对象。这很好。
答案 1 :(得分:1)
直接注入JdbcTemplate
的一个缺点是,如果您需要/决定使用SQLExceptionTranslator
。
如果您的JdbcTemplate
是单身人士,则在任何课程中设置SQLExceptionTranslator
会影响使用该模板的所有课程。
例如......
public class JbdcUserDAO implements UserDAO{
@Autowired
private JdbcTemplate jdbcTemplate;
public JbdcUserDAO() {
this.jdbcTemplate.setExceptionTranslator(new UserSQLExceptionTranslator());
}
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
}
和
public class JdbcCompanyDAO implements CompanyDAO{
@Autowired
private JdbcTemplate jdbcTemplate;
public JdbcCompanyDAO() {
}
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
}
通过SQLException
提出的{p> JdbcCompanyDAO
也将通过UserSQLExceptionTranslator
运行,即使它看起来没有注册翻译。