每次使用的时候,都要创建一个JdbcTemplate新实例,这种做法效率很地下,因为我们必须创建重复的语句,JdbcTemplate类被
设计成线程安全的,因此可以在Ioc容器中申明它的单实例,并将这个实例注入到新的Dao中,此外,Spring JDBC框架提供了一
个JdbcDaoSupport类来简化DAO实现,该类申明了JdbcTemplate的属性,可以从IOC容器注入,也可以从数据源创建,
1,注入JDBC模板
public class JdbcUserDao implements UserDao{
private JdbcTemplate jdbcTemplate;
public void setJdbcTemplate(JdbcTemplate jdbcTemplate){
this.jdbcTemplate = jdbcTemplate;
}
public void insert(User user){
String sql = "insert into user values (?,?)";
jdbcTemplate.update(sql,new Object[]{user.getUsername(),user,getPassword()});
}
.........
}
JDBC模板需要设置数据源,可以通过setter方法或者构造函数注入该属性,然后将JDBC模板注入到DAO中
<beans ...>
........
<bean id="jdbcTemplate"
class ="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"/>
</bean>
<bean id="userDao"
class="com.kang.fei.dao.JdbcUserDao">
<property name="jdbcTemplate" ref="jdbcTemplate/>
</bean>
</beans>
2,扩展JdbcDaoSupport类
JdbcDaoSupport类有一个setDataSurce()方法和一个setJdbcTemplate()方法,DAO可以扩展这个类来继承这些方法,然后直接
注入JDBC模板或者数据原来创建JDBC模板,
public abstract class JdbcDaoSupport extends DaoSupport{
private JdbcTemplate jdbcTemplate;
public final void setDataSource(DataSource dataSource){
this.jdbcTemplate = createJdbcTemplate(dataSource);
initTemplateConfig();
}
public final void setJdbcTemplate(JdbcTemplate jdbcTemplate){
this.jdbcTemplate = jdbcTemplate;
initTemplateConfig();
}
public final JdbcTemplate getJdbcTemplate(){
return jdbcTemplate;
}
.................
}
public class JdbcUserDao extends JdbcDaoSupport implements UserDao{
public void insert(User user){
String sql = "insert into user values (?,?)";
this.getJdbcTemplate().update(sql,new Objcet[]{this.getUsername(),this.getPassword()});
}
..............
}
<beans...>
.........
<bean id="userDao"
class = "com.kang.fei.dao.JdbcUserDao">
<property name="dataSource" ref="dataSource"/>
</bean>
</beans>