DAO类+通用持久类+通用动态formBean类

阅读更多

DAO+通用持久类+通用动态formBean类,实现数据增、删、改、查

newxy(新坐标)技术运用之三

 

DAO类”: net.newxy.dbm.BaseDAO或其子类;

“通用持久类”: net.newxy.dbm.DynaDto;

“通用动态formBean类”: net.newxy.struts_faces.DynaFormBean

 

DAO + 通用持久类,实现数据增、删、改、查》 ( 又名《 不同于hibernate,利用通用持久类实现数据增、删、改、查,可极大提高开发效率 ) 文章中介绍的数据增、删、改、查方法比 hibernate 的方法已简单很多,如果引入通用动态 formBean ,开发效率会有更大提高。

 

net.newxy.struts_faces.DynaFormBean类的类图

DAO类+通用持久类+通用动态formBean类_第1张图片

一、利用通用动态formBean类,实现数据增、删、改

strutsActionServlet将用户submit来的数据绑定到net.newxy.struts_faces.DynaFormBean对象中,在后台,通过调用net.newxy.struts_faces.DynaFormBeanpublic 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页面上传了主关键字段值,如:表单中有用户键入了id值。newxy(新坐标)会检查赋给的主关键字值是否已存在,如果存在,作更新(update)操作,如果不存在,作插入(insert)操作。

判断是更新还是插入操作,可以根据返回的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”)==nulldynaDto.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{

              ......

}

         

你可能感兴趣的:(DAO,Struts,.net,HTML,F#)