Spring-jdbc模板

Spring-jdbc模板,spring,jdbctemplate,Spring,Jdbctemplate,我只是从Spring框架开始。我也在使用DBCP池,但我仍然不确定如何正确使用jdbcTemplate 最佳实践是在多个DAO之间重用创建/注入的jdbcTemplate实例,还是为每个DAO创建jdbcTemplate是正确的 我目前正在使用注释方法: public class FooDAO { private JdbcTemplate jdbcTemplate; @Autowired public void setDatasource( DataSource dataSou

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

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

我目前正在使用注释方法:

public class FooDAO  {

  private JdbcTemplate jdbcTemplate;

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

我知道JDBCDAO支持,但我不知道如何注入datasource,因为方法setDatasource被标记为final

public class JdbcDaoSupportTest extends JdbcDaoSupport {

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

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

将其注入并共享。不要叫新人;这使SpringBean工厂失去了控制权。

将其注入并共享。不要叫新人;这使SpringBean工厂失去了控制权。

我知道JDBCDAO支持,但我不知道如何注入datasource,因为方法setDatasource被标记为final

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方法,不管该方法是否为最终方法

<bean id="jdbcDaoSupportTest" class="com.xxxxx.JdbcDaoSupportTest">
        <property name="dataSource" ref="dataSource" />
</bean>
然后在JdbcDaoSupportTest中,可以调用this.getJdbcTemplate来获取JdbcTemplate do
任何操作符。

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

public class JdbcDaoSupportTest extends JdbcDaoSupport {

    public void insert() { 
        this.getJdbcTemplate().execute("insert into  tb_test1 values(1,'ycl','123')");
         System.out.println("complete...");
    }
}
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);
}
Spring调用set方法,不管该方法是否为最终方法

<bean id="jdbcDaoSupportTest" class="com.xxxxx.JdbcDaoSupportTest">
        <property name="dataSource" ref="dataSource" />
</bean>
然后在JdbcDaoSupportTest中,可以调用this.getJdbcTemplate来获取JdbcTemplate do
任何接线员。

首先,谢谢您的回复,但我不确定我是否理解您的建议。我的DAO标记为@Service,因此它们由spring作为bean管理。我的DAO被注入到服务中。据我所知,重用jdbcTemplate是一种很好的方法。但我不确定是否有优雅的方式来做这件事。也许JdbcDaoSupport类应该是那个解决方案。当然。关键是您应该让Spring为您提供数据源;不要打电话给new并自己创建它。欢迎您的感谢,但本网站允许您投票并接受有帮助的答案。如果你发现这解决了你的问题,就投票接受吧。好吧,现在我不确定我是否理解你。数据源由Spring提供,我不创建新的数据源。在每个DAO示例中,都是setter setDatasource DataSource DataSource,其中的.jdbcTemplate=new jdbcTemplate DataSource。但是,如果jdbcTemplate共享良好,那么如何在DAO之间共享此实例。因为每个DAO都有setDataSource方法。首先,谢谢你的回复,但我不确定我是否理解你的建议。我的DAO标记为@Service,因此它们由spring作为bean管理。我的DAO被注入到服务中。据我所知,重用jdbcTemplate是一种很好的方法。但我不确定是否有优雅的方式来做这件事。也许JdbcDaoSupport类应该是那个解决方案。当然。关键是您应该让Spring为您提供数据源;不要打电话给new并自己创建它。欢迎您的感谢,但本网站允许您投票并接受有帮助的答案。如果你发现这解决了你的问题,就投票接受吧。好吧,现在我不确定我是否理解你。数据源由Spring提供,我不创建新的数据源。在每个DAO示例中,都是setter setDatasource DataSource DataSource,其中的.jdbcTemplate=new jdbcTemplate DataSource。但是,如果jdbcTemplate共享良好,那么如何在DAO之间共享此实例。因为每个DAO都有setDataSource方法。
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);
}