码迷,mamicode.com
首页 > 编程语言 > 详细

对SpringDAO层支持的总结

时间:2016-08-19 23:47:31      阅读:249      评论:0      收藏:0      [点我收藏+]

标签:

1、问题
1、JDBC/ORM框架(如Hibernate)开发中编程模型有哪些缺点?  如JDBC

技术分享

 

 
2、解决方案(模板设计模式,本质:将可变的和不可变的分离)
模板方法模式:定义操作的步骤(固定的),将可变的步骤交给子类处理。
Java代码  技术分享
  1. public interface JdbcOperations {  
  2.     //接口定义行为集  
  3.     public Object execute() throws SQLException ;  
  4. }  
 
Java代码  技术分享
  1. public abstract class AbstractJdbcOperations implements JdbcOperations {  
  2.     @Override  
  3.     public final Object execute() throws SQLException {  
  4.        Connection conn = DataSourceUtils.getConnection();  
  5.         try {  
  6.             Object retVal = doInConnection(conn);  
  7.             conn.commit();  
  8.             return retVal;  
  9.         }catch (Exception e) {   conn.rollback(); throw e;}  
  10.         finally {                          conn.close(); }  
  11.     }  
  12.     public abstract Object doInConnection(Connection conn) throws SQLException;  
  13. }   
Java代码  技术分享
  1. public class DataSourceUtils {  
  2.     public static Connection getConnection() {  
  3.         //返回数据库连接  
  4.         return null;  
  5.     }  
  6. }  
Java代码  技术分享
  1. JdbcOperations select = new AbstractJdbcOperations() {  
  2.          @Override  
  3.           public Object doInConnection(Connection conn) throws SQLException {  
  4.               PreparedStatement pstmt =   
  5.                   conn.prepareStatement("select * from tbl_user");  
  6.               ResultSet rs = pstmt.executeQuery();  
  7.               List result = null;  
  8.               //处理结果集  
  9.               return result;  
  10.           }  
  11.       };  
  12.       select.execute();  
 
 缺点:不够灵活 
 
3、解决方案(模板设计模式+回调,本质:将可变的和不可变的分离,可变通过回调)
回调(命令):由组件定义,但不由组件调用,而是由系统调用
                      一般用于:可变不可变分离,未知功能。 
Java代码  技术分享
  1. public interface JdbcOprations2 {  
  2.     //接口定义行为集  
  3.     public Object execute(ConnectionCallback callback) throws Exception ;  
  4.   
  5. }  
Java代码  技术分享
  1. public interface ConnectionCallback {  
  2.     public Object doInConnection(Connection conn) throws SQLException;  
  3. }   
Java代码  技术分享
  1. public class JdbcTemplate implements JdbcOprations2 {  
  2.     @Override  
  3.     public Object execute(ConnectionCallback callback) throws Exception {  
  4.         Connection conn = DataSourceUtils.getConnection();  
  5.         try {  
  6.             Object retVal = callback.doInConnection(conn);  
  7.             conn.commit();  
  8.             return retVal;  
  9.         }  
  10.         catch (Exception e) {  
  11.             conn.rollback();  
  12.             throw e;  
  13.         }  
  14.         finally {  
  15.             conn.close();  
  16.         }  
  17.     }      
  18. }   
Java代码  技术分享
  1. jdbcTemplate.execute(new ConnectionCallback() {  
  2.               
  3.             @Override  
  4.             public Object doInConnection(Connection conn) throws SQLException {  
  5.                 //可变操作  
  6.                 return null;  
  7.             }  
  8.         });   
Java代码  技术分享
  1. public interface PreparedStatementCallback {  
  2.     public Object doInPreparedStatement(PreparedStatement pstmt)   
  3.         throws  SQLException;  
  4. }   
缺点:灵活但不通用     
 
4、解决方案(Spring JDBC框架)

技术分享
 
 JdbcTemplate jdbcTemplate = new JdbcTemplate(ds);
 
 
5、异常问题
JDBC/ORM框架(如Hibernate)开发中异常处理有哪些缺点? 不一致的异常类,如JDBC是SQLException 而hibernate是HibernateException,等。
缺点:不一致的异常体系,需要了解每个框架的异常含义 ,Spring的一致的异常体系(DataAccessException) 

 
6、DAO访问问题
访问JDBC和访问Hibernate使用完全不同且根本不类似的API?
为了便于以一种一致的方式使用各种数据访问技术,如JDBC、JDO和Hibernate,
 
Spring提供了一套抽象DAO类供你扩展。
JdbcDaoSupport - JDBC数据访问对象的基类。
       需要一个DataSource,同时为子类提供 JdbcTemplate。
HibernateDaoSupport - Hibernate数据访问对象的基类。
      需要一个SessionFactory,同时为子类提供 HibernateTemplate。
JdoDaoSupport - JDO数据访问对象的基类。
     需要设置一个PersistenceManagerFactory, 同时为子类提供JdoTemplate。
JpaDaoSupport - JPA数据访问对象的基类。
    需要一个EntityManagerFactory,同时 为子类提供JpaTemplate。
 
一致的DAO抽象
Callback:定义可变行为,即不可预知行为(命令设计模式)
Template:提供模板支持,简化开发Support:提供对Template的支持,提供一组简便方法,并提供获取Template的方法

 

对SpringDAO层支持的总结

标签:

原文地址:http://www.cnblogs.com/doudouxiaoye/p/5789290.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!