• [框架] DAO的作用以及和其他层的关联


    为什么要有DAO?

    ① 将从页面接收来的查询条件参数或者从平台获取的参数设置到DAO中,从而DAO的SQL语句中就可以用接收到的参数作为查询数据的where子句条件的参数。

    举一个查询列表的实例:
    1)首先明确一个事实,为什么在handler页面中可以通过request.getParameter(Xxx);获得表单提交的内容。

    在JSP中,我们在表单内填写的内容一旦提交之后,就会被封装到Action的request对象之中。
    因此在后台程序,只要方法里传有request参数,就能够通过这种方法获取表单内容。
    同样的,也可以通过response将后台程序数据传回表单。不过通常都是用setAttribute()方法。

    public void doSearch(HttpServletRequest request,HttpServletResponse response, Connection conn)

    2)在handler中

    接收到了username的参数[查询条件][这里的username是JSP页面里文本框控件的标识/name]
    String username = request.getParameter(username);

    然后在handler层先实例化一个DAO
    DAO dao = new DAO();

    将username设置在DAO中
    dao.SetUserName(username);


    实例化一个Factory
    Factory factory = new Factory();

    调用Factory的setDao()方法
    factory.setDAO(dao);

    调用Factory的find()方法
    List list = factory.find(和DAO对应的VO);

    返回List
    return  list;


    3)DAO中

    首先在DAO中会用相应字段的定义

    private String userName;

    然后在handler里设置在dao中的参数username是通过下面这个方法设置进来的

     public void setUserName(String _username/形参) {
      this.userName/本DAO定义 = _username;
     }

    在handler里面set的是实参,这个函数里的_username是形参。
    那就是,实参传递表单真实的username给形参_username,然后形参接收到表单内容后,设置到本类(dao)定义的变量userName里面。


    然后做数据库字段和Java对象字段的映射
    protected void setupFields() throws DAOException {
      addField("useName", "USERNAME");
    }


    最后如果是单表/视图查询,就到此为止,不过在SetipField中要设置主键表的信息
    如果是多表查询,就要再重写getSearchSQL()方法 设置查询条件。

      sql.append(" WHERE ISSUBUNIT = '" + Constants.YORN_YES + "' AND JGUUID ='" + jgUuid + "'");
      if (!StringUtility.isNullorBlank(userName)) {
       sql.append("AND PRJNAME LIKE '%" +userName + "%' ");
      }

    这里的jgUuid和userName就是实参传到形参,又设置为本DAO变量

    当然,在DAO中也将接收到的参数、JavaBean对象定义的变量和数据库的字段三者做了持久化的映射。

    ==========================================================================

    为什么setAttribute后要forward到一个jsp页面

    setAttribute是为了将调用handler类返回的数据共享到request属性范围内,也就是页面间相互共享该数据。
    在设置了数据共享之后,就跳转到与之共享的这个页面,将后台处理的数据交由这个页面来反馈显示【JSTL+EL】。


    ===========================================================================

    DAO的find和FindAll方法有什么区别

    DAO的setDao方法和SetObjectValue方法有什么区别


    找到这个方法所在的类
    使用反编译工具将此类的class文件编译为JAVA文件,然后,看代码是怎么定义的即可区分。

    ===========================================================================

    DAO.calss

    公司自己开发的一个数据访问工具类
    在com.icss....里

  • 相关阅读:
    Cocos开发中Visual Studio下libcurl库开发环境设置
    Cocos2d-x数据持久化-修改数据
    Cocos2d-x数据持久化-查询数据
    Cocos2d-x中SQLite数据库管理工具
    Cocos2d-x中创建SQLite数据库
    Visual Studio下SQLite数据库开发环境设置
    spring01
    String类的常用方法
    基本数据类型的包装类和随机数
    枚举类的使用
  • 原文地址:https://www.cnblogs.com/avivaye/p/2971234.html
Copyright © 2020-2023  润新知