每次使用的时候,都要创建一个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>