zoukankan      html  css  js  c++  java
  • 分页当前页数据库分页的封装类编写和在SSH中的使用

    本文笔者在深圳吃饭的时候突然想到的...这两天就有想写几篇关于分页当前页的博客,所以回家到以后就奋笔疾书的写出来发表了

              分页,简略说就是将一大页的据数分割成两页或更多页来表现。处好在于顺应屏幕的巨细,免避一拉到底涌现据数的漏查;处坏就是加大了服务器的和附。在现的分页方法重要有两种:1.根据需求分批从据数库调取牢固size的据数,2.应用集合类一次性从据数库调取据数,再进行分页理处。明天,我解讲的是第一种分页方法。

               首先,创立web工程并搭建好SSH框架环境。在bean包下新建分页的装封类PageBean和通普Bean 类User,编写User.hbm.xml。

        细详代码如下:

                PageBean

        

    import java.util.List;
    @SuppressWarnings("unchecked")
    public class PageBean {
    	
    	private List 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; // 否是有下一页
    
    	public List getList() {
    		return list;
    	}
    
    	public void setList(List list) {
    		this.list = list;
    	}
    
    	public int getAllRow() {
    		return allRow;
    	}
    
    	public void setAllRow(int allRow) {
    		this.allRow = allRow;
    	}
    
    	public int getTotalPage() {
    		return totalPage;
    	}
    
    	public void setTotalPage(int totalPage) {
    		this.totalPage = totalPage;
    	}
    
    	public int getCurrentPage() {
    		return currentPage;
    	}
    
    	public void setCurrentPage(int currentPage) {
    		this.currentPage = currentPage;
    	}
    
    	public int getPageSize() {
    		return pageSize;
    	}
    
    	public void setPageSize(int pageSize) {
    		this.pageSize = pageSize;
    	}
    
    	/** */
    	/**
    	 * 初始化分页信息
    	 */
    	public void init() {
    		this.isFirstPage = isFirstPage();
    		this.isLastPage = isLastPage();
    		this.hasPreviousPage = isHasPreviousPage();
    		this.hasNextPage = isHasNextPage();
    	}
    
    	/** */
    	/**
    	 * 以下判断页的信息,需只getter方法(is方法)可即
    	 * 
    	 * @return
    	 */
    
    	public boolean isFirstPage() {    
    		return (currentPage == 1);// 如是当前页是第1页    
    	}	
    	public boolean isLastPage() {    
     return currentPage == totalPage; //如果当前页是最后一页    
    }	
    	public boolean isHasPreviousPage() {    
     return currentPage != 1; //只要当前页不是第1页    
    }	
    	public boolean isHasNextPage() {    
     return currentPage != totalPage; //只要当前页不是最后1页    
    }	
    	/** */
    	/**
    	 * 盘算总页数,静态方法,供外部直接通过类名调用
    	 * 
    	 * @param pageSize
    	 *            每页记载数
    	 * @param allRow
    	 *            总记载数
    	 * @return 总页数
    	 */
    	public static int countTotalPage(final int pageSize, final int allRow) {
    		int totalPage = allRow % pageSize == 0 ? allRow / pageSize : allRow
    				/ pageSize + 1;
    		return totalPage;
    	}
    
    	/** */
    	/**
    	 * 盘算当前页开始记载
    	 * 
    	 * @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;
    	}
    }

                  User

    package com.sram.bean;
    import java.util.ArrayList;
    import java.util.LinkedList;
    import java.util.List;
    
    /**
     * 用户bean
     * 
     */
    public class User {
    
    	private int id;
    	private String username;  //用户名
    	private String password; //码密
    	private String picUrl;  //片图
    	private String email;  //邮箱
    	private String tel;   //话电
    	private String sex;  //性别
    	private String job; //任务
    
    	public int getId() {
    		return id;
    	}
    	
    	public String getPicUrl() {
    		return picUrl;
    	}
    
    	public void setPicUrl(String picUrl) {
    		this.picUrl = picUrl;
    	}
    
    	public void setId(int id) {
    		this.id = id;
    	}
    	public String getUsername() {
    		return username;
    	}
    	public void setUsername(String username) {
    		this.username = username;
    	}
    	public String getPassword() {
    		return password;
    	}
    	public void setPassword(String password) {
    		this.password = password;
    	}
    	public String getEmail() {
    		return email;
    	}
    	public void setEmail(String email) {
    		this.email = email;
    	}
    	public String getTel() {
    		return tel;
    	}
    	public void setTel(String tel) {
    		this.tel = tel;
    	}
    	public String getSex() {
    		return sex;
    	}
    	public void setSex(String sex) {
    		this.sex = sex;
    	}
    	public String getJob() {
    		return job;
    	}
    	public void setJob(String job) {
    		this.job = job;
    	}
    	
    	
    }

              然后,编写Dao层的关相代码。

                  User的Dao口接IUserDao.java,部份代码如下:

    void addUser(User user);
    	//  登录证验
    	User testLogin(User user) ;
    	//到得全部用户
    	public List<User> queryForPage(final String hql, final int offset,
    			final int length);
    	//到得记载总数
    	int getAllRowCount(String hql);

                在现实类UserDaoImpl.java中,现实对据数的分页提取

           

    public List<User> queryForPage(final String hql, final int offset,
    			final int length) {
    		List list = hibernateTemplate.executeFind(new HibernateCallback() {
    
    			public Object doInHibernate(Session session)
    					throws HibernateException, SQLException {
    				Query query = session.createQuery(hql);
    				query.setFirstResult(offset);
    				query.setMaxResults(length);
    				List<User> list = query.list();
    				return list;
    
    			}
    		});
    
    		return list;
    	}
    
    	public int getAllRowCount(String hql) {
    		
    		return this.hibernateTemplate.find(hql).size();
    	}

               

        

        以后

        

        每日一道理
    人的生命似洪水奔流,不遇着岛屿和暗礁,难以激起美丽的浪花。

        , 成完service层对Dao层类方法的装封,便于action调用

               User的service层口接IUserService.java症结代码如下:

    // 添加用户
    	void addUser(User user);
    	//登录证验
    	User testLogin(User user) ;
    	//到得对应页的据数信息
    	public PageBean queryForPage(int pageSize,int currentPage);

              User的service层现实类UserServiceImpl.java,门部代码现实

         

    @Repository
    public class UserServiceImpl implements IUserService {
    
    	@Resource
    	private IUserDao ud;
    
    	public void addUser(User user) {
    		ud.addUser(user);
    	}
    
    	public List<User> listUser(final int offset,
    	 		final int length) {
    		return ud.listUser(offset,length);
    	}
    
    	public User testLogin(User user) {
    	    return ud.testLogin(user);
    	}
    	@SuppressWarnings("unchecked")
    	public PageBean queryForPage(int pageSize, int page) {
    		final String hql = "from User"; // 查询句语
    		int allRow = this.ud.getAllRowCount(hql); // 总记载数
    		int totalPage = PageBean.countTotalPage(pageSize, allRow); // 总页数
    		final int offset = PageBean.countOffset(pageSize, page); // 当前页开始记载
    		final int length = pageSize; // 每页记载数
    		final int currentPage = PageBean.countCurrentPage(page);
    		List<User> list =this.ud.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;
    
    	}
    
    }

                 

        

        接下来

        

        ,重要成完action包下对求请的取获和采用的响应。

                  在这里,我只对分页信息的提取部份做简略绍介:

                     1.定义分页所需的属性:

             

    private PageBean pageBean; // 含包布分信息的bean
    private int page; // 第几页

                      下面的属性中没有每页要表现的记载条数,是因为在方法中认默表现条数为常量。如果你要需现实分页记载的调整时,将此属性设为变量并编写其get/set方法可即取获。

                     2.对页面求请调用service方法。

    @Resource
    	private IUserService us;
    //查看全部用户列表
    	public String enterUserList() {
    		
    		 this.pageBean = us.queryForPage(5, page);  
    		 ServletActionContext.getRequest().setAttribute("userList",
    					pageBean.getList()); 
    		return "query_user";
    	}

                   关于Struts的xml,和Spring的xml置配 就不做多过论述。

            最后来看终究表现页面的代码如何编写:

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    <%@taglib prefix="s" uri="/struts-tags" %>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <base href="<%=basePath%>">
        
        <title>My JSP 'index.jsp' starting page</title>
    	<meta http-equiv="pragma" content="no-cache">
    	<meta http-equiv="cache-control" content="no-cache">
    	<meta http-equiv="expires" content="0">    
    	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    	<meta http-equiv="description" content="This is my page">
    	<!--
    	<link rel="stylesheet" type="text/css" href="styles.css">
    	-->
      </head>
      
      <body><table>
      	<tr>
    	<th>用户名	</th>
    	<th>用户码密    </th>
    	</tr>
    	<s:iterator value="#request.userList" var="frist">
    	<tr class="gradec">
    	<td align="center">
    	<s:property value="#frist.id" />
    	</td>
    	<td align="center">
    	<s:property value="#frist.username" />
    	</td>
    	<td align="center">
             <s:property value="#frist.password" />
    	</td>
    	</tr>
    	</s:iterator>
    	<tr class="odd">
    	<td>
    	</td>
    	<td>
    	<s:if test="%{pageBean.currentPage == 1}">   
        首页		上一页
        </s:if>
    	<s:else>
    	<a href="user/userAction!enterUserList?page=1">首页</a>
    	<a href="user/userAction!enterUserList?page=<s:property value="%{pageBean.currentPage-1}"/>" />上一页</a>
            </s:else>
    	</td>
    	<td>
    	<s:if test="%{pageBean.currentPage != pageBean.totalPage}">
    <a href="user/userAction!enterUserList?page=<s:property value="%{pageBean.currentPage+1}"/>">下一页</a>
    <a href="user/userAction!enterUserList?page=<s:property value="pageBean.totalPage"/>">尾页</a>
            </s:if>
    	<s:else> 
        下一页	 尾页 
        </s:else>
    	</td>
            <td>
    	<div align="center">
    	页次
    	<s:property value="pageBean.currentPage" />/<s:property value="pageBean.totalPage" />共<s:property value="pageBean.allRow" />记载
    	</div>
    	<div align="center"></div>
    	</td>
    	</tr>
    </table></body>
    </html>

            

        

                至此,分页代码作操基本成完,希望初学者看懂分页道理,计划自己意满的翻页效果,不要一味复制粘贴插件代码。

        

    文章结束给大家分享下程序员的一些笑话语录: 真正的程序员喜欢兼卖爆米花,他们利用CPU散发出的热量做爆米花,可以根据米花爆裂的速度听出正在运行什么程序。

  • 相关阅读:
    从 datetime2 数据类型到 datetime 数据类型的转换产生一个超出范围的值
    EF增删改查操作
    将String转化成Stream,将Stream转换成String, C# Stream 和 byte[] 之间的转换(文件流的应用)
    解决远程主机关闭了连接错误(正在中止线程)
    手动爆库详细流程以及语句解析
    asp.net 中将汉字转换成拼音
    jdk1.6下使用sardine和jackrabbit-webdav的问题
    模式匹配-BF算法
    git项目创建
    main thread starting…
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3067439.html
Copyright © 2011-2022 走看看