我只是从Spring框架开始。我也在使用DBCP pooling,但我仍然不确定如何正确使用jdbcTemplate。
最佳实践是在多个DAO之间重用创建/注入的jdbcTemplate实例,还是为每个DAO创建jdbcTemplate是正确的?
我目前使用的是注解方法:
public class FooDAO {
private JdbcTemplate jdbcTemplate;
@Autowired
public void setDatasource( DataSource dataSource ) {
this.jdbcTemplate = new JdbcTemplate( dataSource );
}
}我知道JdbcDaoSupport,但我不知道如何注入数据源,因为方法setDatasource被标记为final。
但是,我仍然不确定重用创建的jdbcTemplate是否是最佳实践。
发布于 2011-09-30 18:19:15
注入并分享它。不要调用"new";这会将控制权从Spring bean工厂手中夺走。
发布于 2014-07-24 15:27:29
我知道JdbcDaoSupport,但我不知道如何注入数据源,因为方法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方法,并不关心这个方法是不是final。
<bean id="jdbcDaoSupportTest" class="com.xxxxx.JdbcDaoSupportTest">
<property name="dataSource" ref="dataSource" />
</bean>然后,在您的JdbcDaoSupportTest中,您可以调用this.getJdbcTemplate()来让JdbcTemplate执行任何操作符。
发布于 2018-05-28 15:14:33
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);
}https://stackoverflow.com/questions/7608965
复制相似问题