日期:2014-05-16 浏览次数:20667 次
?????? 大多数情况下Spring JDBC都是与IOC容器一起使用。通过配置方式使用Spring JDBC。 ?????? 而且大部分时间都是使用JdbcTemplate类(或SimpleJdbcTemplate和NamedParameterJdbcTemplate)进行开发,即可能80%时间使用JdbcTemplate类,而只有20%时间使用其他类开发,符合80/20法则。 ?????? Spring JDBC通过实现DaoSupport来支持一致的数据库访问。 ? ? Spring JDBC提供如下DaoSupport实现: 由于JdbcTemplate、NamedParameterJdbcTemplate、SimpleJdbcTemplate类使用DataSourceUtils获取及释放连接,而且连接是与线程绑定的,因此这些JDBC模板类是线程安全的,即JdbcTemplate对象可以在多线程中重用。 ? 接下来看一下Spring JDBC框架的最佳实践: ? 1)首先定义Dao接口 ? ? 2)定义Dao实现,此处是使用Spring JDBC实现: ? ? ?????? 此处注意首先Spring JDBC实现放在dao.jdbc包里,如果有hibernate实现就放在dao.hibernate包里;其次实现类命名如UserJdbcDaoImpl,即×××JdbcDaoImpl,当然如果自己有更好的命名规范可以遵循自己的,此处只是提个建议。 ? 3)进行资源配置(resources/chapter7/applicationContext-resources.xml): ? ? ? PropertyPlaceholderConfigurer用于替换配置元数据,如本示例中将对bean定义中的${…}占位符资源用“classpath:chapter7/resources.properties”中相应的元素替换。 ? ?7.5 集成Spring JDBC及最佳实践
package cn.javass.spring.chapter7.dao;
import cn.javass.spring.chapter7.UserModel;
public interface IUserDao {
public void save(UserModel model);
public int countAll();
}
package cn.javass.spring.chapter7.dao.jdbc;
import org.springframework.jdbc.core.namedparam.BeanPropertySqlParameterSource;
import org.springframework.jdbc.core.simple.SimpleJdbcDaoSupport;
import cn.javass.spring.chapter7.UserModel;
import cn.javass.spring.chapter7.dao.IUserDao;
public class UserJdbcDaoImpl extends SimpleJdbcDaoSupport implements IUserDao {
private static final String INSERT_SQL = "insert into test(name) values(:myName)";
private static final String COUNT_ALL_SQL = "select count(*) from test";
@Override
public void save(UserModel model) {
getSimpleJdbcTemplate().update(INSERT_SQL, new BeanPropertySqlParameterSource(model));
}
@Override
public int countAll() {
return getJdbcTemplate().queryForInt(COUNT_ALL_SQL);
}
}
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:chapter7/resources.properties</value>
</list>
</property>
</bean>