DAO类+通用持久类+通用动态formBean类,实现数据增、删、改、查
newxy(新坐标)技术运用之三
“DAO类”: net.newxy.dbm.BaseDAO或其子类;
“通用持久类”: net.newxy.dbm.DynaDto;
“通用动态formBean类”: net.newxy.struts_faces.DynaFormBean。
net.newxy.struts_faces.DynaFormBean类的类图
一、利用通用动态formBean类,实现数据增、删、改
struts的ActionServlet将用户submit来的数据绑定到net.newxy.struts_faces.DynaFormBean对象中,在后台,通过调用net.newxy.struts_faces.DynaFormBean的public Object getDto()、public Object get(String name) 方法将上传的数据提出,net.newxy.struts_faces.DynaFormBean起作传送数据的作用。
(1)数据插入:Object update(Object dto) throws Exception;
举例:
public ActionForward update(ActionMapping actionMapping, ActionForm actionForm,
HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) throws Exception{
......
net.newxy.struts_faces.DynaFormBean form=( net.newxy.struts_faces.DynaFormBean)actionForm;
try{
net.newxy.dbm.DynaDto dynaDto=( net.newxy.dbm.DynaDto)form.getDto();
net.newxy.dbm.BaseDAO dao=new net.newxy.dbm.BaseDAO();
dynaDto.set_table("table1");//设置表名
Object result=dao.update(dynaDto);
}catch(Exception e){
......
}
......
}
jsp页面不上传主关键字段值,主关键字段值会自动得到,是原有最大值加一。
如果jsp页面上传了主关键字段值,如:表单中有
判断是更新还是插入操作,可以根据返回的result值来判断,如果result值为空,是作更新操作,如果result不空是作插入操作。
Object result=dao.update(dynaDto);
如果想需要知道自动赋给的主关键字段值,可以用如下方法:
Object result=dao.update(dynaDto);
Object idValue=null;
If(result!=null)
idValue=((DynaDto)result).get(“id”);
idValue就是自动赋给的主关键字段值。
(2)数据更新:
举例:
public ActionForward update(ActionMapping actionMapping, ActionForm actionForm,
HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) throws Exception{
......
DynaFormBean form=(DynaFormBean)actionForm;
try{
DynaDto dynaDto=(DynaDto)form.getDto();
net.newxy.dbm.BaseDAO dao=new net.newxy.dbm.BaseDAO();
dynaDto.set_table("table1");
Object result=dao.update(dynaDto);
}catch(Exception e){
......
}
......
}
数据更新方法与数据插入方法相同,需注意:如果dynaDto中没有主关键字段值,即dynaDto.get(“id”)==null,或dynaDto.get(“id”)所得主关键字段值在表中不存在,dao.update(dynaDto)方法仍然作插入操作。
在进行dao.update(dynaDto)前,可以判断数据是否已存在于表中:
Object masterKey=dynaDto.get(“id”);
Object record=null;
if(masterKey!=null)
record=dao.load(dynaDto);
如果masterKey==null 或 record==null,表中不存在该条记录,dao.update(dynaDto)作插入操作,否则该条记录存在于表中,作更新操作。
那么在jsp页面上如何保证用户录入的是新插入数据或是编辑修改的数据呢?参看本文后面部分在jsp页面上新建、编辑数据
(3)数据删除
举例:
public ActionForward remove(ActionMapping actionMapping, ActionForm actionForm,
HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) throws Exception{
......
DynaFormBean form=(DynaFormBean)actionForm;
try{
//删除formBean当前数据对应的记录:
Object record=form.getDto();
net.newxy.dbm.BaseDAO dao=new net.newxy.dbm.BaseDAO();
dynaDto.set_table("table1");//设置表名,如果上传数据的jsp页面表单中没有
dao.remove(dynaDto);
//httpServletRequest.getParameter(“_index”)值代表记录号,删除该条记录
String index= httpServletRequest.getParameter(“_index”);
Object record=form.getDto(index);
dao.remove(record);
}catch(Exception e){
......
}
......
}
二、利用通用动态formBean类,实现多项查询
1、后台代码
public ActionForward find(ActionMapping actionMapping, ActionForm actionForm,
HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) throws Exception{
DynaFormBean form=(DynaFormBean)actionForm;
net.newxy.util.FormBeanUtils.createForm(form,httpServletRequest);
......
}
net.newxy.util.FormBeanUtils.createForm(form,httpServletRequest)方法将查询结果放在form的_coll属性中。后台代码极其简单,
那么httpServletRequest中包含了什么数据?下面是jsp页面表单对上传数据的组织。
2、前台查询条件的组织
逻辑 行业 等于 企业名称 企业地址
该例是对企业表、行业表的连表查询,查询的基本条件是industry.code=enterprise.industry_code。
industry:行业代码表
industry.code:行业代码
enterprise:企业表
enterprise.industry_code:企业的行业代码
下面是表单中包含的几个属性:
(1)_dao,是DynaFormBean的保留属性,是DAO类的别名,告诉后台由哪个DAO类来操作数据。别名在WEB-INF/classes下的newxy.properties文件中指定,假设有一DAO类如下:
package common;
public class MyDAO1 extends net.newxy.dbm.BaseDAO{
......
}