• 对SpringDAO层支持的总结


    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的方法
  • 相关阅读:
    Lync 2013和Exchange 2013集成
    eclise配置tomcat出现服务Tomcat version 6.0 only supports J2EE 1.2, 1.3, 1.4 and Java EE 5 Web modules
    二叉树C语言
    NYOJ 298 相变点(矩阵高速功率)
    简化网站开发:SiteMesh小工具
    Android Ant 和 Gradle 包装工艺和效率控制
    [Webpack 2] Chunking common modules from multiple apps with the Webpack CommonsChunkPlugin
    [Webpack 2] Grouping vendor files with the Webpack CommonsChunkPlugin
    [Webpack 2] Hashing with Webpack for long term caching
    [Webpack 2] Maintain sane file sizes with webpack code splitting
  • 原文地址:https://www.cnblogs.com/doudouxiaoye/p/5789290.html
Copyright © 2020-2023  润新知