[框架] 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....里