zoukankan      html  css  js  c++  java
  • 代码规范案例(ssh分页)

    1.首先我们先新建立一个接口MemberDao.java,把所需要用到的方法列出来:


    package cn.zbvc.dao;
    import java.util.List;
    import cn.zbvc.bean.User;
    public interface MemberDao {
    /**
     * 分页查询
     * @param hql  查询条件
     * @param offset  开始记录
     * @param length  一次查询几条记录
     * @return 查询的记录集合
     */
    public List<User> queryForPage(final String hql,final int offset,final int length);
    /**
     * 查询所有的记录数
     * @param hql 查询条件
     * @return 总记录数
     */
    public int getAllRowCount(String hql);
    }

    2.然后我们创建其实现类:MemberDaoImpl.java

    package cn.zbvc.dao.impl;
    import java.util.List;
    import org.hibernate.Query;
    import org.hibernate.Session;
    import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
    import cn.zbvc.bean.User;
    import cn.zbvc.dao.MemberDao;
    public class MemberDaoImpl extends HibernateDaoSupport implements MemberDao {
    /**
     * 查询所有的记录数
     * @param hql 查询条件
     * @return 总记录数
     */
    public int getAllRowCount(String hql) {
    return this.getHibernateTemplate().find(hql).size();
    }
    /**
     * 分页查询
     * @param hql  查询条件
     * @param offset  开始记录
     * @param length  一次查询几条记录
     * @return 查询的记录集合
     */
    @SuppressWarnings("unchecked")
    public List<User> queryForPage(final String hql, final int offset, final int length) {
    Session session = this.getSession();
    Query q = session.createQuery(hql);
    q.setFirstResult(offset);
    q.setMaxResults(length);
    List<User> list = q.list();
    System.out.println(list.size());
    session.close();
    return list;
    }

    大家可以看到,我们一共定义了两个方法,第一个方式是获取数据库表的总记录数,第二个方法是获取我们想要获取的某一页的数据集合,传递的三个参数分别是:查询条件、开始的记录、结束的记录。

    细心的读者会发现,这个类继承了HibernateDaoSupport类,HibernateDaoSupportSpring提供的对Hibernate支持的类,在其参数内,我们能像原生的Hibernate一样调用query.setFirstResult(offset)query.setMaxResults(length)来实现分页查询功能。

    3.然后我们需要建立一个获取分页信息的pageBean.java:

    package cn.zbvc.util;
    import java.util.List;
    import cn.zbvc.bean.User;
    public class PageBean {
    private List<User> list;  //要返回的某一页的记录列表
    private int allRow; //总记录数
    private int totalPage;  //总页数
    private int currentPage;  //当前页
    private int pageSize;  //每页的记录数
    private boolean isFirstPage;  //是否为当前第一页
    private boolean isLastPage;  //是否为最后一页
    private boolean hasPreviousPage;  //是否有前一页
    private boolean hasNextPage;  //是否有下一页
    Set and get方法
    PageBean中的具体方法:
    /**
     * 初始化分页信息
     */
    public void init(){
    this.isFirstPage = isFirstPage;
    this.isLastPage = isLastPage;
    this.hasPreviousPage = hasPreviousPage;
    this.hasNextPage = hasNextPage;
    }
    /**
     * 计算总页数  静态方法
     * @param pageSize  每页的记录数
     * @param allRow  总记录数
     * @return 总页数
     */
    public static int countTatalPage(final int pageSize,final int allRow){
    int toalPage = allRow % pageSize == 0 ? allRow/pageSize : allRow/pageSize + 1;
    return toalPage;
    }
    /**
     * 计算当前页开始的记录
     * @param pageSize 每页记录数
     * @param currentPage 当前第几页
     * @return 当前页开始记录号
     */
    public static int countOffset(final int pageSize,final int currentPage){
    final int offset = pageSize * (currentPage - 1);
    return offset;
    }
    /**
     * 计算当前页,若为0或者请求的URL中没有“?page = ”则用1代替
     * @param page 传入的参数(可能为空,即0  则返回1)
     * @return
     */
    public static int countCurrentPage(int page){ final int curpage = (page == 0 ? 1 : page); return curpage; }    }

    4.业务逻辑层的实现:我们现在就只操作User,现在我们在UserService中定义一个方法:

    /**
     * 分页查询  
     * @param pageSize  每页显示多少记录
     * @param currentPage 当前页
     * @return 封装了分页信息的bean
     */
    public PageBean queryForPage(int pageSize,int page);

    5.使用UserServiceImpl实现这个具体方法:

    /**
     * 分页查询  
     * @param pageSize  每页显示多少记录
     * @param currentPage 当前页
     * @return 封装了分页信息的bean
     */
    public PageBean queryForPage(int pageSize, int page) {
    final String hql = "from User user order by user.id"//查询语句
    int allRow = memberDao.getAllRowCount(hql);  //总记录数
    int totalPage = PageBean.countTatalPage(pageSize, allRow); //总页数
    final int offset = PageBean.countOffset(pageSize, page); //当前页开始记录
    final int length = pageSize; // 每页记录数
    final int currentPage = PageBean.countCurrentPage(page); // 当前页
    List list = memberDao.queryForPage(hql, offset, length); //
    //把分页信息保存到Bean当中
    PageBean pageBean  = new PageBean();
    pageBean.setPageSize(pageSize);
    pageBean.setCurrentPage(currentPage);
    pageBean.setAllRow(allRow);
    pageBean.setTotalPage(totalPage);
    pageBean.setList(list);
    pageBean.init();
    return pageBean;
    }

    6.然后我们为了不影响上一个例子,我们新创建一个ListUserAction2.java:

    package cn.zbvc.action.user;
    import java.util.List;
    import com.opensymphony.xwork2.ActionSupport;
    import cn.zbvc.bean.User;
    import cn.zbvc.service.UserService;
    import cn.zbvc.util.PageBean;
    public class ListUserAction2 extends ActionSupport {
    private UserService service;//通过Spring创建业务层对象  使用set方法依赖注入
    private PageBean pageBean; //封装了分页信息和数据内容的pageBean
    private List<User> listUser;//用于储存pageBean当中被封装的User信息
    private int page = 1//表示从网页中返回的当前页的值  默认为1 表示默认显示第一页内容
    public int getPage() {
    return page;
    }
    public void setPage(int page) {
    this.page = page;
    }
    public List<User> getListUser() {
    return listUser;
    }
    public void setListUser(List<User> listUser) {
    this.listUser = listUser;
    }
    public PageBean getPageBean() {
    return pageBean;
    }
    public void setPageBean(PageBean pageBean) {
    this.pageBean = pageBean;
    }
    public void setService(UserService service) {
    this.service = service;
    }
    public String execute()throws Exception{
    this.pageBean = service.queryForPage(5, page);//获取封装了分页信息和数据的pageBean
    this.listUser = this.pageBean.getList(); //获取数据
    return SUCCESS;
    }
    }

    7.配置applicationContext.xmlstruts.xml的相关信息,这里省略了。

    8.在listUser2.jsp页面中添加分页内容:

    <s:iterator value="pageBean">
            <tr>
             <td colspan="6" align="center" bgcolor="#5BA8DE">
             共<s:property value="allRow"/>条记录    
             共<s:property value="totalPage"/>页    
             当前第<s:property value="currentPage"/><br>
        
             <s:if test="%{currentPage == 1}">
               第一页  上一页
             </s:if>
             <!-- currentPage为当前页 -->
             <s:else>
               <href="listUser2.action?page=1">第一页</a>
               <href="listUser2.action?page=<s:property value="%{currentPage-1}"/>">上一页</a>
             </s:else>
        
             <s:if test="%{currentPage != totalPage}">
             <href="listUser2.action?page=<s:property value="%{currentPage+1}"/>">下一页</a>
             <href="listUser2.action?page=<s:property value="totalPage"/>">最后一页</a>
                </s:if>
        
             <s:else>
             下一页  最后一页
             </s:else>
             </td>
            </tr>
    </s:iterator>

    9.查看效果:


    10.思考总结

    关于分页功能实现,应该是有有很多种解决方法,我介绍的这种解决方案是为了给大家一个

    范例,让大家明白分页功能实现的原理,其中,大部分的内容借鉴了之前提到的网址。接下来的时间,我会继续学习关于分页功能的其它实现方式,然后分享给大家,另外,还会继续的整理SSH的整合。

  • 相关阅读:
    【JS】在JS方法中返回多个值的三种方法
    【装饰】博客园背景轮播
    【jquery】查看全文/收起
    jQuery节点查找方法
    点击事件的累加问题
    微信小程序动画效果集合
    【数组】数组的操作
    【Mock.js】 入门
    【下拉刷新】WEUI下拉刷新
    __iomem作用
  • 原文地址:https://www.cnblogs.com/lengzhijun/p/4739623.html
Copyright © 2011-2022 走看看