spring 持久層封裝
 (1) jdbc in spring
 Spring對(duì)JDBC進(jìn)行了良好的封裝,通過提供相應(yīng)的模板和輔助類,在相當(dāng)程度上降低了JDBC操作的復(fù)雜性。
 并且得益于Spring良好的隔離設(shè)計(jì),JDBC封裝類庫可以脫離Spring Context獨(dú)立使用,也就是說,
 即使系統(tǒng)并沒有采用Spring作為結(jié)構(gòu)性框架,我們也可以單獨(dú)使用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的機(jī)制.
jdbcTemplate.update(...)
jdbcTemplate.query(...)
jdbcTemplate.call(...)

1. 代碼控制的事務(wù)管理
簡單配置事務(wù),然后在代碼中使用TransactionTemplate.


2. 參數(shù)化配置的事務(wù)管理
采用proxy模式,簡單!!!!

(2)hibernate in spring
與上面JDBC中的配置相對(duì)比,區(qū)別主要在于:
1. SessionFactory的引入
Hibernate中通過SessionFactory創(chuàng)建和維護(hù)Session。Spring對(duì)
SessionFactory的配置也進(jìn)行了整合,無需再通過Hibernate.cfg.xml對(duì)
SessionFactory進(jìn)行設(shè)定。
SessionFactory節(jié)點(diǎn)的mappingResources屬性包含了映射文件的路徑,list
節(jié)點(diǎn)下可配置多個(gè)映射文件。
hibernateProperties節(jié)點(diǎn)則容納了所有的屬性配置。
可以對(duì)應(yīng)傳統(tǒng)的Hibernate.cfg.xml文件結(jié)構(gòu)對(duì)這里的SessionFactory配置
進(jìn)行解讀。
2. 采用面向Hibernate的TransactionManager實(shí)現(xiàn):
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
對(duì)比之前的JDBC和Hibernate配置,可以看到:
1. sqlMapClient節(jié)點(diǎn)
SpringFrameWork Developer’s Guide Version 0.6
類似SessionFactory之與Hibernate,這里我們引入了針對(duì)ibatis SqlMap的
SqlMapClientFactoryBean配置。SqlMapClient對(duì)于ibatis的意義類似于Session
與Hibernate以及Connection與JDBC,這里的sqlMapClient節(jié)點(diǎn)實(shí)際上配置了一
個(gè)sqlMapClient的創(chuàng)建工廠類。
configLocation屬性配置了ibatis映射文件的名稱。
2. transactionManager節(jié)點(diǎn)
這里我們的transactionManager配置與之前JDBC示例中相同,都采用了
DataSourceTransactionManager,這與Hibernate有些差異。
3. userDAO節(jié)點(diǎn)
對(duì)應(yīng)的,UserDAO需要配置兩個(gè)屬性,sqlMapClient和DataSource,
sqlMapClient將從指定的DataSource中獲取數(shù)據(jù)庫連接。
其他配置基本上與JDBC示例中相同,這里就不加贅述



public class UserDAO extends SqlMapClientDaoSupport implements
IUserDAO {
   public void insertUser(User user) {
      getSqlMapClientTemplate().update("insertUser", user);
   }
}