我有一个Java库,我使用Spring的JDBC支持通过JDBC访问数据库。这个库大约包含我需要访问的每个表的DAO类,超过一百个。目前,每次我需要执行新查询时,我都会实例化一个新的JdbcTemplate或其变体之一。这被认为是好的做法还是我应该尽可能多地重用一个JdbcTemplate?我实际上已经在书籍或在线文档中看到了这两种方法的例子。
上下文是J2EE应用程序,但理想情况下,代码应该可以在不同的上下文中使用,例如在离线测试或命令行支持工具中。
答案 0 :(得分:4)
注入一个,为什么还要实例化? (目前还不清楚你的意思是“通过Spring上下文实例化”还是“使用new
实例化”。)
我见过的大多数样本都在配置中执行此操作,我甚至不确定我是否在演示/测试代码之外手动实例化它们。我认为手工制作没有什么好处,如果在Spring之外完成则为零。
答案 1 :(得分:3)
虽然创建一个新的JdbcTemplate没有太多开销,但没有太多意义。 JdbcDaoSupport类是一个用于处理基于JdbcTemplate的DAO的抽象类,它一致地允许每个DAO注入一个DataSource(并且覆盖底层实例化基于该DataSource的JdbcTemplate)或注入JdbcTemplate。既然你可以做任何一种,那么如果你想通过设置一个或多个以下属性来定制你的JdbcTemplate,那么你只会做后者:
对于这些属性的每个组合,您可能会有一个JdbcTemplate。所有这些都有默认值,因此只有在你要覆盖它们时才需要设置它们。根据DAO的多样性,您可能有一个或多个。或者在扩展JdbcDaoSupport的情况下,你可能没有,让每个DAO只将数据源包装在默认的JdbcTemplate底层。
答案 2 :(得分:0)
JdbcTemplate
类的实例在配置后是线程安全的,因此您可以配置JdbcTemplate
的单个实例,然后将此共享引用安全地注入多个DAO(或存储库)。有关详细信息:JdbcTemplate-idioms