spring 持久層封裝
(1) jdbc in spring
Spring對JDBC進行了良好的封裝,通過提供相應的模板和輔助類,在相當程度上降低了JDBC操作的復雜性。
并且得益于Spring良好的隔離設計,JDBC封裝類庫可以脫離Spring Context獨立使用,也就是說,
即使系統并沒有采用Spring作為結構性框架,我們也可以單獨使用Spring的JDBC部分(spring-dao.jar)
來改善我們的代碼。
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
//jdbcTemplate.update("UPDATE user SET age = 10 WHERE id = 'erica'");
jdbcTemplate.update(
"UPDATE user SET age = ? WHERE id = ?",
new PreparedStatementSetter() {
public void setValues(PreparedStatementSetter ps)
throws SQLException {
ps.setInt(1, 18);
ps.setString(2, "erica");
}
}
);
大量采用了callback的機制.
jdbcTemplate.update(...)
jdbcTemplate.query(...)
jdbcTemplate.call(...)
1. 代碼控制的事務管理
簡單配置事務,然后在代碼中使用TransactionTemplate.
2. 參數化配置的事務管理
采用proxy模式,簡單!!!!
(2)hibernate in spring
與上面JDBC中的配置相對比,區別主要在于:
1. SessionFactory的引入
Hibernate中通過SessionFactory創建和維護Session。Spring對
SessionFactory的配置也進行了整合,無需再通過Hibernate.cfg.xml對
SessionFactory進行設定。
SessionFactory節點的mappingResources屬性包含了映射文件的路徑,list
節點下可配置多個映射文件。
hibernateProperties節點則容納了所有的屬性配置。
可以對應傳統的Hibernate.cfg.xml文件結構對這里的SessionFactory配置
進行解讀。
2. 采用面向Hibernate的TransactionManager實現:
org.springframework.orm.hibernate.HibernateTransactionManag
er
public class UserDAO extends HibernateDaoSupport implements IUserDAO
{
public void insertUser(User user) {
getHibernateTemplate().saveOrUpdate(user);
}
}
(3)ibatis in spring
對比之前的JDBC和Hibernate配置,可以看到:
1. sqlMapClient節點
SpringFrameWork Developer’s Guide Version 0.6
類似SessionFactory之與Hibernate,這里我們引入了針對ibatis SqlMap的
SqlMapClientFactoryBean配置。SqlMapClient對于ibatis的意義類似于Session
與Hibernate以及Connection與JDBC,這里的sqlMapClient節點實際上配置了一
個sqlMapClient的創建工廠類。
configLocation屬性配置了ibatis映射文件的名稱。
2. transactionManager節點
這里我們的transactionManager配置與之前JDBC示例中相同,都采用了
DataSourceTransactionManager,這與Hibernate有些差異。
3. userDAO節點
對應的,UserDAO需要配置兩個屬性,sqlMapClient和DataSource,
sqlMapClient將從指定的DataSource中獲取數據庫連接。
其他配置基本上與JDBC示例中相同,這里就不加贅述
public class UserDAO extends SqlMapClientDaoSupport implements
IUserDAO {
public void insertUser(User user) {
getSqlMapClientTemplate().update("insertUser", user);
}
}