Spring 的JdbcTemplate的持久层封装
1,Spring 2.0提供了几种常用的持久层访问方式:
?
1,Jdbc,-----------JdbcTemplate;
2,hibernate ,-------hibernateTemplate;
3,JDO
4,Oracle TopLink;
5,iBATIS SQL Maps;
6,JPA;
?
?
2,jdbc封装的相关类:
?
?? JdbcDaoSupport:
?? 对?JdbcTemplate的封装,通过getJdbcTemplate()的得到JdbcTemplate对象。有setDataSource方法,通过该方法 对JdbcTemplate初始化,createJdbcTemplate(dataSource)。
?
?? 通过xml配置id 为dataSource的bean。格式如下:
?
<bean id="dataSource" destroy-method="close" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
?
这是用数据源的dataSource的标准设置, hibernate的数据源也是这样配置。
?
在DAO的配置中,必须把dataSource作为reference注入进去。
?
JdbcAccessor :JdbcTemplate父类,实现了一些基本方法,比如:setLazyInit,isLazyInit,afterPropertiesSet,
setDatabaseProductName,setExceptionTranslator;
?
JdbcOperations:JdbcTemplate父接口,定义了一些的数据访问的操作。execute,query。
?
SqlProvider:sql语句提供接口。
?
DataSourceUtils:数据源管理接口,提供静态的方法,负责数据源的连接,
得到连接:?? Connection getConnection(DataSource dataSource);
关闭连接:releaseConnection(Connection con, DataSource dataSource);
?
PreparedStatementCreator:PreparedStatement生成接口,只有一个方法需要实现:
PreparedStatement createPreparedStatement(Connection con);
?
PreparedStatementCallback:PreparedStatement操作接口,只有一个方法需要实现:
Object doInPreparedStatement(PreparedStatement ps) ;
?
CallableStatementCreator:CallableStatement生成接口,只有一个方法需要实现:
CallableStatement createCallableStatement(Connection con);
?
RowCallbackHandler:行操作接口,只有一个方法需要实现:
void processRow(ResultSet rs) ;
?
ConnectionCallback:连接操作接口;只有一个方法需要实现:
?
Object doInConnection(Connection con);
?
3,JdbcTemplate的异常处理:
?
getExceptionTranslator()得到异样翻译器SQLErrorCodeSQLExceptionTranslator。他的方法:
translate(String task, String sql, SQLException sqlEx)来翻译异常,错误代码在文件里:sql-error-codes.xml。
?
觉得JdbcTemplate的异常处理不是,很好,往往不能精确的定位异样,试需要手工配置新文件,还是需要程序处理,不是很明白。
?
4,NamedParameterJdbcTemplate:带参数的JdbcTemplate。类似如下:
?
private NamedParameterJdbcTemplate namedParameterJdbcTemplate;
public void setDataSource(DataSource dataSource) {
this.namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(dataSource);
}
public int countOfActorsByFirstName(String firstName) {
String sql = "select count(0) from T_ACTOR where first_name = :first_name";
Map namedParameters = Collections.singletonMap("first_name", firstName);
return this.namedParameterJdbcTemplate.queryForInt(sql, namedParameters);
}
?
5,SimpleJdbcTemplate:jdk5.0以上简洁风格的JdbcTemplate。
?
6,另外提供了操作jdbc的java 类:
?
SqlQuery:
?
MappingSqlQuery:
?
SqlUpdate:
?
StoredProcedure:
?
SqlFunction:
?
?
?
?
?
?
?
?
?
?
?
?