首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring - jdbcTemplate

Spring - jdbcTemplate
EN

Stack Overflow用户
提问于 2011-09-30 18:17:15
回答 3查看 2.6K关注 0票数 1

我只是从Spring框架开始。我也在使用DBCP pooling,但我仍然不确定如何正确使用jdbcTemplate。

最佳实践是在多个DAO之间重用创建/注入的jdbcTemplate实例,还是为每个DAO创建jdbcTemplate是正确的?

我目前使用的是注解方法:

代码语言:javascript
复制
public class FooDAO  {

  private JdbcTemplate jdbcTemplate;

  @Autowired
  public void setDatasource( DataSource dataSource ) {
     this.jdbcTemplate = new JdbcTemplate( dataSource );
  }
}

我知道JdbcDaoSupport,但我不知道如何注入数据源,因为方法setDatasource被标记为final。

但是,我仍然不确定重用创建的jdbcTemplate是否是最佳实践。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-09-30 18:19:15

注入并分享它。不要调用"new";这会将控制权从Spring bean工厂手中夺走。

票数 4
EN

Stack Overflow用户

发布于 2014-07-24 15:27:29

我知道JdbcDaoSupport,但我不知道如何注入数据源,因为方法setDatasource被标记为final。

代码语言:javascript
复制
public class JdbcDaoSupportTest extends JdbcDaoSupport {

    public void insert() { 
        this.getJdbcTemplate().execute("insert into  tb_test1 values(1,'ycl','123')");
         System.out.println("complete...");
    }
}

Spring调用set方法,并不关心这个方法是不是final。

代码语言:javascript
复制
<bean id="jdbcDaoSupportTest" class="com.xxxxx.JdbcDaoSupportTest">
        <property name="dataSource" ref="dataSource" />
</bean>

然后,在您的JdbcDaoSupportTest中,您可以调用this.getJdbcTemplate()来让JdbcTemplate执行任何操作符。

票数 0
EN

Stack Overflow用户

发布于 2018-05-28 15:14:33

代码语言:javascript
复制
try {
    JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
    String sql = "select user.id as id,user.roll_no as createdId,user.name as name,user.type as company,role.role as year "
            + "from user_role join user on  user.id=user_role.user_id "
            + "join role on role.id=user_role.role_id "
            + "where (user.status='ACTIVE' or user.status='ADMIN') AND user.username='" + userName + "'";
    UserVo userDetails = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<UserVo>(UserVo.class));
    or
    Long company = jdbcTemplate.queryForObject(sql, Long.class);
    or
    List<UserVo> users = jdbcTemplate.query(sql, new BeanPropertyRowMapper<UserVo>(UserVo.class));
    logger.info("Retrieve user details by username");
    return userDetails;
} catch (Exception e) {
    logger.error("error in  getting UserDetails using UserName", e);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7608965

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档