分享

DAO层的分析(一)

 孙中熙——路 2012-02-16
DAO层的分析(一)
2010-07-06 10:27

两、三年前说过要坚持写文剖析各种算法、面向对象、框架、架构及各种应用技术,然进展缓慢,一者力有不逮,二者工作变动,无暇它顾。如今咬牙还债,算给自己个交代。这次就从最常用的DAO开始吧,

  1. 数据访问的封装

    J2EE应用开发中,数据库的使用非常频繁,大多公司里所使用的Framework都有对数据库操作进行封装的被称为DAO层的部分。下面,我结合自己在不同时期所参与的项目,就各种DAO层的封装方式进行一下比照,借此也可以梳理一下技术发展的进化轨迹。

    1. 项目1 (久远,尚无SSH流行)
      • 使用方式
        1. 用户DAO继承BaseDAO
        2. 在业务模块初始化用户DAO,并传递给如下3个参数
          • String dataSourceName 数据源名称(JNDI).
          • boolean autoReleaseConnection 是否自动释放链接.
          • boolean useStoreProcedure 是否使用存储过程.
        3. 在业务模块根据需要调用用户DAO对象的相应方法.
        4. 例子:

          业务逻辑中调用: UserDAO userDAO = new UserDAO(null,false,false); List allUser = userDAO.getAllUser();

      • 原理
        • 主要实现了对SQL执行过程的封装。以一个查询SQL为例,它的书写只需要这么一句:

          DataSet ds = execQuery(querySQL);

          在execQuery(String sql)中,做了3件事:

          1. 获取连接
          2. 使用获取的连接执行SQL
          3. 把从数据库中取得的数据封装进DateSet对象中,返回给用户。程序员在用户DAO对象里面进行组装SQL的工作,然后调用父类提供的执行execQuery方法,返回封装的DataSet对象,该对象以List方式存放着所有查询结果。
      • UML

      • 优点:省却了婆婆妈妈的RecordSet, Statement的声明和繁琐重复的异常捕获。
      • 缺点
        1. 把DAO的模式控制放进业务模块里不合适。
        2. 只支持单一数据库。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多