Spring-jdbc模板
我只是从Spring框架开始。我也在使用DBCP池,但我仍然不确定如何正确使用jdbcTemplate 最佳实践是在多个DAO之间重用创建/注入的jdbcTemplate实例,还是为每个DAO创建jdbcTemplate是正确的 我目前正在使用注释方法: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
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);
}