电气配件管理系统总结

1. 项目架构  

当然是刚刚学完的ssh了,也是当下最热门的。感觉hibernate里的细节好多,尤其是优化方面,感觉我这次写的程序有100人同时访问就挂掉了。。。还有spring,感觉她很神秘,不知不觉省了好多事情,但感觉她的功能肯定不止于此。应该还是缺少原理的理解。

 

具体版本号:struts2.3.16   spring3.2  hibernate4.1.4

Jar包也在整合的开始搭配好了

 

分包:

电气配件管理系统总结_第1张图片

 

第一次写,在Action层与service层上的设计还有些混乱,事务控制的不好,有些原子性操作写在了Action层,这是错误的。

2. 大体编码顺序

1.确认数据库后,根据需求确认菜单划分,然后建立jsp模型。

2.根据菜单确定好Action的颗粒度,一般为一个子菜单(一个jsp)

3.根据数据库写好domain层,按照需要配置好hibernate

4.根据需要考虑:

         a).是否需要分页展示

         b).进入页面前的准备工作

         c).domain中的主键是否需要enrich主键等内容

5.回到jsp写html界面原型

6.写web层的Action:

         a).需要成员变量或DTO(前后传递东西)

         b).方法(搭架子)

7.写domain对应的persist层

8.根据原子操作写service层

9.补充好Action层内容

3.hibernate中关于中间表带属性的多对多配置

一般将关系拆分为两个一对多

4.CURD之U

4.1Ajax方式:异步更新,成功后弹框:

$("#submitId").click(function(){

                   if(confirm("您确认更改吗?")){

                            varinputs = $("#formId").find("input");

                            vardata = {};

                            vardataKey;

                            vardataValue;

                            inputs.each(function(){

                                     if($(this).index != 6){

                                               dataKey= $(this).attr("name");

                                               dataValue= $(this).val();

                                               data[dataKey]= dataValue;

                                     }

                            });

                            data['user.role.roleId']= $("#roleIdId ").val();

                            $.ajax({

                               type:"POST",

                             url:"userManagerAction!updateUser",

                             data:data,

                             cache:false,

                             success:function(){

                                       alert("修改成功!");

                             },       //success回调函数结束

                             error:function(){

                                       alert("服务器异常!修改失败!");

                             }

                     })//ajax结束

                            returntrue;

                   }else{

                returnfalse;

        }

4.2表单提交到Action 同步执行,更新后,查询更新Entity的PK

public String updateSupp(){

            try{

                     supplierManagerImpl.modifySupplier(supplier);

                     results = newArrayList<Suppliers>();

                     results.add(supplierManagerImpl.findSupplierById(supplier.getSupplierId()));

                     return SUCCESS;

            }catch(Exception e){

                     e.printStackTrace();

                     return ERROR;

            }

   }

5.CRUD之D

     1.Ajax方式:

Action层

public String updateSupp(){

            try{

                     supplierManagerImpl.modifySupplier(supplier);

                     results = newArrayList<Suppliers>();

                     results.add(supplierManagerImpl.findSupplierById(supplier.getSupplierId()));

                     return SUCCESS;

            }catch(Exception e){

                     e.printStackTrace();

                     return ERROR;

            }

   }

Jsp:

public String updateSupp(){

            try{

                     supplierManagerImpl.modifySupplier(supplier);

                     results = newArrayList<Suppliers>();

                     results.add(supplierManagerImpl.findSupplierById(supplier.getSupplierId()));

                     return SUCCESS;

            }catch(Exception e){

                     e.printStackTrace();

                     return ERROR;

            }

   }

     2.同步跳转:

         Action层:

public String updateSupp(){

            try{

                     supplierManagerImpl.modifySupplier(supplier);

                     results = newArrayList<Suppliers>();

                     results.add(supplierManagerImpl.findSupplierById(supplier.getSupplierId()));

                     return SUCCESS;

            }catch(Exception e){

                     e.printStackTrace();

                     return ERROR;

            }

   }

6.CRUD之C

添加操作一般采用同步跳转

结果可视化:查询结果按照插入时间排序,插入成功后查询所有

                             插入成功后按照PK查找,只查一个

Action层:

publicString addUser(){

           Date regDate = new Date();

           user.setRegisterTime(regDate);

           if(userManagerImpl.addUser(user)){

                    findAllUsers();                    //插入成功后查找所有的用户,按照注册时间排序。

                    return SUCCESS;

           }else{

                    return ERROR;

           }

   }

7.CRUD之R

查找分为:查所有、条件查找。

条件查找又分为:固定条件个数、非固定条件个数

以为实际中数据量一般较大,故一般采用分页查找方式

7.1查找所有分页

三个常用方法:

 

@Override                           //查找并返回所有用户

         publicList<Users> selectUsersByPage(int page, int rowsPerPage) {

                   Sessionsession = sessionFactory.getCurrentSession();

                   Queryq = session.createQuery("from Users u order by u.registerTime desc");

                   q.setMaxResults(Constants.rowsPerPage);                     //每页最多可显示条数

                   q.setFirstResult((page-1)* rowsPerPage);                        //每页从第几条记录开始

                   List<Users>users = new ArrayList<Users>();

                   users= (List<Users>)q.list();

                   returnusers;

         }

        

         @Override                          //返回所有用户数

         publicint getUsersNum() {

                   Sessionsession = sessionFactory.getCurrentSession();

                   Stringhql = "select count(*) from Users";

             int rows = 0;

             Query q = session.createQuery(hql);

             rows = ((Long)q.iterate().next()).intValue();

             return rows;

         }

        

         @Override                          //返回共多少页计划数据

         publicint getUsersTotalPage(int rowsPerPage) {

                   introws = getUsersNum();

                   if(rows % rowsPerPage == 0) { 

           return rows / rowsPerPage; 

       } else { 

           return rows / rowsPerPage + 1; 

       } 

         }

7.2条件查找分页

固定条件查找:

         查询函数:publicList<Users> findUsersByType(Map type, int page, int rowsPerPage);

                   //Map中存放类型名和值

非固定条件个数查找:

         查询函数:publicList<Users> findUsersByType(int page, int rowsPerPage, Map … types);

                   //利用java的可变参数特性

         拼接hql函数:publicString createHql(Map … types);

 

你可能感兴趣的:(电气配件管理系统总结)