Home >Java >javaTutorial >SSH project customer list and BaseDao encapsulation example

SSH project customer list and BaseDao encapsulation example

零下一度
零下一度Original
2017-07-23 10:24:041680browse

一、客户列表

  1.分析

  2.书写步骤

  (1)封装PageBean

public class PageBean {//当前页数private Integer currentPage;//总记录数private Integer totalCount;//每页显示条数private Integer pageSize;//总页数private Integer totalPage;//分页列表数据private List    list;public PageBean(Integer currentPage, Integer totalCount, Integer pageSize) {this.totalCount = totalCount;        this.pageSize =  pageSize;        this.currentPage = currentPage;        if(this.currentPage == null){//如页面没有指定显示那一页.显示第一页.this.currentPage = 1;
        }        if(this.pageSize == null){//如果每页显示条数没有指定,默认每页显示3条this.pageSize = 3;
        }        //计算总页数this.totalPage = (this.totalCount+this.pageSize-1)/this.pageSize;        //判断当前页数是否超出范围//不能小于1if(this.currentPage < 1){this.currentPage = 1;
        }//不能大于总页数if(this.currentPage > this.totalPage){this.currentPage = this.totalPage;
        }
        
    }//计算起始索引public int getStart(){return (this.currentPage-1)*this.pageSize;
    }    public Integer getCurrentPage() {return currentPage;
    }public void setCurrentPage(Integer currentPage) {this.currentPage = currentPage;
    }public Integer getTotalCount() {return totalCount;
    }public void setTotalCount(Integer totalCount) {this.totalCount = totalCount;
    }public Integer getPageSize() {return pageSize;
    }public void setPageSize(Integer pageSize) {this.pageSize = pageSize;
    }public Integer getTotalPage() {return totalPage;
    }public void setTotalPage(Integer totalPage) {this.totalPage = totalPage;
    }public List getList() {return list;
    }public void setList(List list) {this.list = list;
    }

}

  (2)书写Action

public class CustomerAction extends ActionSupport implements ModelDriven<Customer> {private Customer customer = new Customer();    private CustomerService cs;private Integer currentPage;private Integer pageSize;public String list() throws Exception {//封装离线查询对象DetachedCriteria dc = DetachedCriteria.forClass(Customer.class);//判断并封装参数if(StringUtils.isNotBlank(customer.getCust_name())){
            dc.add(Restrictions.like("cust_name", "%"+customer.getCust_name()+"%"));
        }        //1 调用Service查询分页数据(PageBean)PageBean pb = cs.getPageBean(dc,currentPage,pageSize);//2 将PageBean放入request域,转发到列表页面显示ActionContext.getContext().put("pageBean", pb);return "list";
    }

    @Overridepublic Customer getModel() {return customer;
    }public void setCs(CustomerService cs) {this.cs = cs;
    }public Integer getCurrentPage() {return currentPage;
    }public void setCurrentPage(Integer currentPage) {this.currentPage = currentPage;
    }public Integer getPageSize() {return pageSize;
    }public void setPageSize(Integer pageSize) {this.pageSize = pageSize;
    }

}

  (3)书写Service

public class CustomerServiceImpl implements CustomerService {private CustomerDao cd;
    @Overridepublic PageBean getPageBean(DetachedCriteria dc, Integer currentPage, Integer pageSize) {//1 调用Dao查询总记录数Integer totalCount = cd.getTotalCount(dc);//2 创建PageBean对象PageBean pb = new PageBean(currentPage, totalCount, pageSize);//3 调用Dao查询分页列表数据        
        List<Customer> list = cd.getPageList(dc,pb.getStart(),pb.getPageSize());//4 列表数据放入pageBean中.并返回        pb.setList(list);return pb;
    }public void setCd(CustomerDao cd) {this.cd = cd;
    }

}

  (4)书写Dao

public class CustomerDaoImpl extends HibernateDaoSupport implements CustomerDao {public Integer getTotalCount(DetachedCriteria dc) {//设置查询的聚合函数,总记录数        dc.setProjection(Projections.rowCount());
        
        List<Long> list = (List<Long>) getHibernateTemplate().findByCriteria(dc);        //清空之前设置的聚合函数dc.setProjection(null);        if(list!=null && list.size()>0){
            Long count = list.get(0);return count.intValue();
        }else{return null;
        }
    }public List<Customer> getPageList(DetachedCriteria dc, int start, Integer pageSize) {        return (List<Customer>) getHibernateTemplate().findByCriteria(dc, start, pageSize);

    }

}

  (5)完成struts以及spring的配置

   strus.xml添加代码:

    <action name="CustomerAction_*" class="customerAction" method="{1}" > <result name="list"  >/jsp/customer/list.jsp</result></action>

   applicationContext.xml添加代码:

    <bean name="customerAction" class="cn.xyp.web.action.CustomerAction" scope="prototype" ><property name="cs" ref="customerService" ></property></bean><bean name="customerService" class="cn.xyp.service.impl.CustomerServiceImpl" ><property name="cd" ref="customerDao" ></property></bean><bean name="customerDao" class="cn.xyp.dao.impl.CustomerDaoImpl" ><!-- 注入sessionFactory --><property name="sessionFactory" ref="sessionFactory" ></property></bean>

  (6)书写前台list.jsp页面

   主要通过表单提交隐藏域的数据、jq和ognl表达式来实现。

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><%@ taglib  prefix="s" uri="/struts-tags" %><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><TITLE>客户列表</TITLE> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><LINK href="${pageContext.request.contextPath }/css/Style.css?1.1.11" type=text/css rel=stylesheet><LINK href="${pageContext.request.contextPath }/css/Manage.css?1.1.11" type=text/cssrel=stylesheet><script type="text/javascript" src="${pageContext.request.contextPath }/js/jquery-1.4.4.min.js?1.1.11"></script><SCRIPT language=javascript>function changePage(pageNum){
            //1 将页码的值放入对应表单隐藏域中
                $("#currentPageInput").val(pageNum);
            //2 提交表单
                $("#pageForm").submit();
    };
    
    function changePageSize(pageSize){
            //1 将页码的值放入对应表单隐藏域中
            $("#pageSizeInput").val(pageSize);
        //2 提交表单
            $("#pageForm").submit();
    };
</SCRIPT><META content="MSHTML 6.00.2900.3492" name=GENERATOR></HEAD><body><TABLE cellSpacing=0 cellPadding=0 width="98%" border=0><Tbody><TR><TD width=15><IMG src="${pageContext.request.contextPath }/images/new_019.jpg"border=0></TD><TD width="100%" background="${pageContext.request.contextPath }/images/new_020.jpg"height=20></TD><TD width=15><IMG src="${pageContext.request.contextPath }/images/new_021.jpg"border=0></TD></TR></Tbody></TABLE><TABLE cellSpacing=0 cellPadding=0 width="98%" border=0><Tbody><TR><TD width=15 background=${pageContext.request.contextPath }/images/new_022.jpg><IMGsrc="${pageContext.request.contextPath }/images/new_022.jpg" border=0></TD><TD vAlign=top width="100%" bgColor=#ffffff><TABLE cellSpacing=0 cellPadding=5 width="100%" border=0><TR><TD class=manageHead>当前位置:客户管理 &gt; 客户列表</TD></TR><TR><TD height=2></TD></TR></TABLE><TABLE borderColor=#cccccc cellSpacing=0 cellPadding=0width="100%" align=center border=0><Tbody><TR><TD height=25><FORM id="pageForm" name="customerForm"action="${pageContext.request.contextPath }/CustomerAction_list"method=post><!-- 隐藏域.当前页码 --><input type="hidden" name="currentPage" id="currentPageInput" value="<s:property value="#pageBean.currentPage" />" /><!-- 隐藏域.每页显示条数 --><input type="hidden" name="pageSize" id="pageSizeInput"       value="<s:property value="#pageBean.pageSize" />" /><TABLE cellSpacing=0 cellPadding=2 border=0><Tbody><TR><TD>客户名称:</TD><TD><INPUT class=textbox id=sChannel2style="WIDTH: 80px" maxLength=50 name="cust_name" value="${param.cust_name}"></TD><TD><INPUT class=button id=sButton2 type=submitvalue=" 筛选 " name=sButton2></TD></TR></Tbody></TABLE></FORM></TD></TR><TR><TD><TABLE id=gridstyle="BORDER-TOP-WIDTH: 0px; FONT-WEIGHT: normal; BORDER-LEFT-WIDTH: 0px; BORDER-LEFT-COLOR: #cccccc; BORDER-BOTTOM-WIDTH: 0px; BORDER-BOTTOM-COLOR: #cccccc; WIDTH: 100%; BORDER-TOP-COLOR: #cccccc; FONT-STYLE: normal; BACKGROUND-COLOR: #cccccc; BORDER-RIGHT-WIDTH: 0px; TEXT-DECORATION: none; BORDER-RIGHT-COLOR: #cccccc"cellSpacing=1 cellPadding=2 rules=all border=0><Tbody><TRstyle="FONT-WEIGHT: bold; FONT-STYLE: normal; BACKGROUND-COLOR: #eeeeee; TEXT-DECORATION: none"><TD>客户名称</TD><TD>客户级别</TD><TD>客户来源</TD><TD>联系人</TD><TD>电话</TD><TD>手机</TD><TD>操作</TD></TR><s:iterator value="#pageBean.list" var="cust" ><TR         style="FONT-WEIGHT: normal; FONT-STYLE: normal; BACKGROUND-COLOR: white; TEXT-DECORATION: none"><TD><s:property value="#cust.cust_name" /></TD><TD><s:property value="#cust.cust_level" /></TD><TD><s:property value="#cust.cust_source" /></TD><TD><s:property value="#cust.cust_linkman" /></TD><TD><s:property value="#cust.cust_phone" /></TD><TD><s:property value="#cust.cust_mobile" /></TD><TD><a href="${pageContext.request.contextPath }/customerServlet?method=edit&custId=${customer.cust_id}">修改</a>  <a href="${pageContext.request.contextPath }/customerServlet?method=delete&custId=${customer.cust_id}">删除</a></TD></TR></s:iterator></Tbody></TABLE></TD></TR><TR><TD><SPAN id=pagelink><DIV
                                                style="LINE-HEIGHT: 20px; HEIGHT: 20px; TEXT-ALIGN: right">共[<B><s:property value="#pageBean.totalCount" /> </B>]条记录,[<B><s:property value="#pageBean.totalPage" /></B>]页
                                                ,每页显示 <%-- changePageSize($(&#39;#pageSizeSelect option&#39;).filter(&#39;:selected&#39;).val()) --%> <select name="pageSize" onchange="changePageSize($(&#39;#pageSizeSelect option:selected&#39;).val())" id="pageSizeSelect" ><option value="3" <s:property value="#pageBean.pageSize==3?&#39;selected&#39;:&#39;&#39;" /> >3</option><option value="5" <s:property value="#pageBean.pageSize==5?&#39;selected&#39;:&#39;&#39;" /> >5</option></select>条
                                                [<A href="javaScript:void(0)" onclick="changePage(<s:property value=&#39;#pageBean.currentPage-1&#39; />)" >前一页</A>]<B><s:property value="#pageBean.currentPage" /></B>[<A href="javaScript:void(0)" onclick="changePage(<s:property value=&#39;#pageBean.currentPage+1&#39; />)"  >后一页</A>] 
                                                到<input type="text" size="3" id="page" name="page" value="<s:property value="#pageBean.currentPage" />"  />
                                                页                                                <input type="button" value="Go" onclick="changePage($(&#39;#page&#39;).val())"/></DIV></SPAN></TD></TR></Tbody></TABLE></TD><TD width=15 background="${pageContext.request.contextPath }/images/new_023.jpg"><IMGsrc="${pageContext.request.contextPath }/images/new_023.jpg" border=0></TD></TR></Tbody></TABLE><TABLE cellSpacing=0 cellPadding=0 width="98%" border=0><Tbody><TR><TD width=15><IMG src="${pageContext.request.contextPath }/images/new_024.jpg"border=0></TD><TD align=middle width="100%"background="${pageContext.request.contextPath }/images/new_025.jpg" height=15></TD><TD width=15><IMG src="${pageContext.request.contextPath }/images/new_026.jpg"border=0></TD></TR></Tbody></TABLE></body></HTML>

二、BaseDao封装

  1.抽取BaseDao

  2.BaseDao设计思路

  3.BaseDao接口书写

public interface BaseDao<T> {//增void save(T t);//删void delete(T t);//删void delete(Serializable id);//改void update(T t);//查 根据id查询    T    getById(Serializable id);//查 符合条件的总记录数    Integer    getTotalCount(DetachedCriteria dc);//查 查询分页列表数据List<T> getPageList(DetachedCriteria dc,Integer start,Integer pageSize);
    
}

  4.BaseDao的实现类

public class BaseDaoImpl<T> extends HibernateDaoSupport implements BaseDao<T> {private Class clazz;//用于接收运行期泛型类型
    public BaseDaoImpl() {//获得当前类型的带有泛型类型的父类ParameterizedType ptClass = (ParameterizedType) this.getClass().getGenericSuperclass();//获得运行期的泛型类型clazz = (Class) ptClass.getActualTypeArguments()[0];
    }

    @Overridepublic void save(T t) {
        getHibernateTemplate().save(t);
    }

    @Overridepublic void delete(T t) {
        
        getHibernateTemplate().delete(t);
        
    }

    @Overridepublic void delete(Serializable id) {
        T t = this.getById(id);//先取,再删        getHibernateTemplate().delete(t);
    }

    @Overridepublic void update(T t) {
        getHibernateTemplate().update(t);
    }

    @Overridepublic T getById(Serializable id) {        
        
        return (T) getHibernateTemplate().get(clazz, id);
    }

    @Overridepublic Integer getTotalCount(DetachedCriteria dc) {//设置查询的聚合函数,总记录数        dc.setProjection(Projections.rowCount());
        
        List<Long> list = (List<Long>) getHibernateTemplate().findByCriteria(dc);        //清空之前设置的聚合函数dc.setProjection(null);        if(list!=null && list.size()>0){
            Long count = list.get(0);return count.intValue();
        }else{return null;
        }
        
    }

    @Overridepublic List<T> getPageList(DetachedCriteria dc, Integer start, Integer pageSize) {
        
        List<T> list = (List<T>) getHibernateTemplate().findByCriteria(dc, start, pageSize);        return list;
    }
}

  5.业务Dao中的应用

public class CustomerDaoImpl extends BaseDaoImpl<Customer> implements CustomerDao {
    
}

The above is the detailed content of SSH project customer list and BaseDao encapsulation example. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn