ssh框架在图书管理系统练习中的分页操作

添加分页工具类PageBean及dao层操作工具类

public class PageBean<T> {

    private Integer pageNo=1;// 当前页码数

    private Integer pageByCount=3;// 每页显示的行数

    private Integer total;// 总记录数

    private Integer pageTotal;// 总页数

    private  List<T> lists;//当前页面数据对象的集合

   

   

   

 

    public List<T> getLists() {

       return lists;

    }

 

    public void setLists(List<T> lists) {

       this.lists = lists;

    }

 

    public Integer getPageNo() {

       return pageNo;

    }

 

    public void setPageNo(Integer pageNo) {

       if (pageNo<1) {

           this.pageNo = 1;

       } else if (pageNo>this.pageTotal&&this.pageTotal>0) {

           this.pageNo=this.pageTotal;

       }else{

           this.pageNo = pageNo;

       }

      

    }

 

    public Integer getPageByCount() {

       return pageByCount;

    }

 

    public void setPageByCount(Integer pageByCount) {

       this.pageByCount = pageByCount;

    }

 

    public Integer getTotal() {

       return total;

    }

 

    public void setTotal(Integer total) {

       this.total = total;

       //计算出总页数

       this.pageTotal=(this.total%this.pageByCount==0)?(this.total/this.pageByCount):(this.total/this.pageByCount+1);

    }

 

    public Integer getPageTotal() {

       return pageTotal;

    }

 

    public void setPageTotal(Integer pageTotal) {

       this.pageTotal = pageTotal;

    }

 

}

 

 

/**

 * 数据访问层的基类

 * @author Administrator

 *

 * @param <T>

 */

public interface BaseDao<T> {

        

        

         public void save(T instances);

        

         public void delete(T instances);

        

         public void update(T instances);

 

         @SuppressWarnings("rawtypes")

         public Object findById(Class clazz ,Integer id) ;

 

         /**

          * 查询所有用户列表

          */

         public List<T> findAll();

 

         /**

          * 查询所有用户列表

          * @param clazz

          */

         @SuppressWarnings("rawtypes")

         public List<Object> findAll(Class clazz);

 

         /**

          * 根据HQL查询数据

          * @param hql

          * @return 实体对象列表

          */

         @SuppressWarnings("rawtypes")

         public List findByHql(String hql) ;

 

         /**

          * 根据对象名和对象属性获取对象集合

          * @param className

          * @param propertyName

          * @param value

          * @return

          */

         public List<T> findByProperty(String className,String propertyName, Object value);

 

         /**

          * 实现分页获取数据的功能

          * @param hql 查询数据的HQL

          * @return Object[0]当前页的数据列表List、Object[1]总页数、Object[2]总记录数

          */

         public Object[] findPageByHql(final String hql, String hqlCount, final int page, final int pageSize);

        

         /**

          * 获取分页对象,实现分页获取数据的功能

          * @param hql 查询数据的HQL

          * @return Page对象 包含当前页的数据列表List、总页数、总数量和页数集合

          */

         public PageBean<T> findPageByHql(final String hql, String hqlCount, PageBean<T> page);

}

 

public interface BookDao  extends BaseDao<Book> {

 

}

 

 

@Component

public class BaseDaoImpl<T> implements BaseDao<T> {

    private Log log = LogFactory.getLog(this.getClass());

    private Class<T> entityClass1;

    private String entityClass;

private HibernateTemplate hibernateTemplate;

 

    @SuppressWarnings("unchecked")

    public BaseDaoImpl() {

       //entityClass = GenericsUtils.getSuperClassGenricType(getClass(), 0);   

       Class c = this.getClass();     

       Type t = c.getGenericSuperclass();    

       if (t instanceof ParameterizedType) {     

           Type[] p = ((ParameterizedType) t).getActualTypeArguments();       

           this.entityClass1 = (Class<T>) p[0];

           entityClass=entityClass1.getName();

       }

      

    }

   

   

    @Resource

    public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {

       this.hibernateTemplate = hibernateTemplate;

    }

    public void save(T instance) {

       log.debug("saving " + instance + " instance");

       try {

           hibernateTemplate.save(instance);

           log.debug("save successful");

       } catch (RuntimeException re) {

           log.error("save failed", re);

           throw re;

       }

    }

   

    public void delete(T instance) {

       log.debug("deleting "+instance+" instance");

      

       try {

           hibernateTemplate.delete(instance);

           log.debug("delete successful");

       } catch (RuntimeException re) {

           log.error("delete failed", re);

           throw re;

       }

    }

   

    public void update(T instance) {

       log.debug("updating "+instance+" instance"); 

       try {

           hibernateTemplate.update(instance);

           log.debug("update successful");

       } catch (RuntimeException re) {

          

           log.error("update failed", re);

           throw re;

       }

    }

   

    @SuppressWarnings("rawtypes")

    public Object findById(Class clazz, Integer id) {

       log.debug("getting "+clazz+" instance with id: " + id);

       try {

           Object  object=hibernateTemplate.get(clazz, id);

           return object;

       } catch (RuntimeException re) {

           log.error("get failed", re);

           throw re;

       }

    }

   

    @SuppressWarnings("unchecked")

    public List<T> findAll() {

       log.debug("getting "+entityClass+" List All ");

       try {

           String hql = "FROM "+entityClass;

           Query queryObject = hibernateTemplate.getSessionFactory().getCurrentSession().createQuery(hql);

       System.out.println("........aaaaaaaaaaaa.....");

           return queryObject.list();

       } catch (RuntimeException re) {

           System.out.println(re.toString());

           log.error("find by HQL ", re);

           throw re;

       }

    }

   

    @SuppressWarnings({ "unchecked", "rawtypes" })

    public List findAll(Class clazz) {

       log.debug("getting "+clazz+" List All ");

       try {

           String c = clazz.toString();

           String hql = "FROM "

                  + c.substring(c.lastIndexOf(".") + 1, c.length());

           Query queryObject = hibernateTemplate

                  .getSessionFactory().getCurrentSession().createQuery(hql);

 

           return queryObject.list();

       } catch (RuntimeException re) {

           log.error("find by HQL ", re);

           throw re;

       }

    }

   

    /**

     * 根据对象名和对象属性查询数据

     * @param className

     * @param propertyName

     * @param value

     * @return 实体对象列表

     */

    @SuppressWarnings("unchecked")

    public List<T> findByProperty(String className,String propertyName, Object value) {

       log.debug("finding "+className+" instance with property: " + propertyName + ", value: " + value);

      

       try {

           String hql = "FROM " + className + " as o WHERE o." + propertyName

                  + " = ?";

           //getSession()?

           Query queryObject = hibernateTemplate

                  .getSessionFactory().getCurrentSession().createQuery(hql);

           queryObject.setParameter(0, value);

 

           return queryObject.list();

       } catch (RuntimeException re) {

           log.error("find by property name failed", re);

           throw re;

       }

    }

   

    /**

     * 根据HQL查询数据

     * @param hql

     * @return 实体对象列表

     */

    @SuppressWarnings("rawtypes")

    public List findByHql(String hql) {

       log.debug(hql);

       try {

           Query queryObject =hibernateTemplate

                  .getSessionFactory().getCurrentSession().createQuery(hql);

           return queryObject.list();

       } catch (RuntimeException re) {

           log.error("find by HQL ", re);

           throw re;

       }

    }

   

    /**

     * 获取分页对象,实现分页获取数据的功能

     * @param hql 查询数据的HQL

     * @param page 需要显示数据的页码

     * @param pageSize 每页数据量

     * @return Object[0]当前页的数据列表List ,Object[1]总页数,Object[2]总数量

     */

    @SuppressWarnings("rawtypes")

    public Object[] findPageByHql(final String hql, String hqlCount, final int page, final int pageSize) {

       log.debug(hql);

       List list = new ArrayList();

       Long total = new Long(0);

       Integer totalPage = 0;

       try {

           //1、根据hql语句查询指定数据

           Query qList = hibernateTemplate.getSessionFactory()

                  .getCurrentSession().createQuery(hql);

           qList.setFirstResult(page * pageSize);

           qList.setMaxResults(pageSize);

           list = qList.list();

          

         //2、根据hql语句查询总记录数

           List listCount = findByHql(hqlCount);

           if(listCount!=null && listCount.size()>0){

              total = (Long)listCount.get(0);

           }

          

           //3、根据总记录数计算出总页数

           totalPage = (int) Math.ceil((double) total.longValue() / pageSize);

       } catch (Exception e) {

           e.printStackTrace();

       }

       return new Object[] { list, totalPage, total };

    }

   

 

    /**

     * 获取分页对象,实现分页获取数据的功能

     * @param hql 查询数据的HQL

     * @param page 分页对象

     * @return page 分页对象

     */

    @SuppressWarnings({ "rawtypes", "unchecked" })

    public PageBean<T> findPageByHql( String hql, String hqlCount, PageBean<T> page) {

       log.debug(hql);

       System.out.println("................"+hql);

       try {

           if(page !=null){

              //1、根据hql语句查询指定数据

              Query qList = hibernateTemplate.getSessionFactory()

                     .getCurrentSession().createQuery(hql);

              //规律:(当前页码数-1*每页显示的行数+1

              int first=(page.getPageNo()-1)*page.getPageByCount();

              qList.setFirstResult(first);

              qList.setMaxResults(page.getPageByCount());

               page.setLists(qList.list());//将数据集合保存到page对象          

               //2、根据hql语句查询总记录数

               List listCount = findByHql(hqlCount);

              if(listCount!=null && listCount.size()>0){

                  page.setTotal(Integer.parseInt(String.valueOf(listCount.get(0))));

              }            

           }

       } catch (Exception e) {

           e.printStackTrace();

        }

       return page;

    }

}

 

 

@Component

@SuppressWarnings("unchecked")

public class BookDaoImpl extends BaseDaoImpl<Book> implements BookDao {

}

 

 

 

public interface BookTypeDao  extends BaseDao<BookType> {

 

}

 

 

@Component

@SuppressWarnings("unchecked")

public class BookTypeDaoImpl extends BaseDaoImpl<BookType> implements BookTypeDao {

}

 

 

/**

 * 图书业务逻辑层接口

 * @author Administrator

 *

 */

public interface BookService {

     PageBean<Book> list_book(PageBean<Book> pageBean,String type,String name,String borrow);

}

 

 

 

@Service

public class BookTypeServiceImpl implements BookTypeService {

 

    @Autowired

 private  BookTypeDao  bookTypeDao;

    @Override

    public List<BookType> queryType() {

       return bookTypeDao.findAll();

      

    }

}

 

 

public class BookAction extends ActionSupport  implements  SessionAware {

 

    private static final long serialVersionUID = 1L;

    @Autowired

    private BookService bookService;

    @Autowired

    private BookTypeService bookTypeService;

   

    private  Map<String,  Object>  session;

 

    private String booktype;

 

    private String bookname;

 

    private String isborrow;

   

    private  PageBean<Book>  page=new PageBean<Book>();

   

    private  Integer pageno;//接收页面传递的当前页码数

    private  Integer  total;//将第一次查询出来的总页码数 传给PageBean类中pageTotal

 

    public String queryBook() {

       List<BookType>  bookTypes= bookTypeService.queryType();

       //通过index.jsp进入action pagenonull if未进入

       // 分页进入action的时候 pageNo 有值, 调用setPageNo()方法 设置的时候 由于PageBean类中pageTotalnull会报空指针错

       //所以 分页查询的时候 需要将第一次查询出来的总页码数 传给PageBean类中pageTotal

       if (total!=null) {

           page.setPageTotal(total);

       }

      

       if (pageno !=null) {

           page.setPageNo(pageno);

       }

       PageBean<Book> pageBeanbookService.list_book(page, booktype, bookname, isborrow);

      session.put("bookTypes", bookTypes);

      session.put("pageBean", pageBean);

       return SUCCESS;

    }

 

    public BookService getBookService() {

       return bookService;

    }

 

    public void setBookService(BookService bookService) {

       this.bookService = bookService;

    }

 

    public BookTypeService getBookTypeService() {

       return bookTypeService;

    }

 

    public void setBookTypeService(BookTypeService bookTypeService) {

       this.bookTypeService = bookTypeService;

    }

 

    public String getBooktype() {

       return booktype;

    }

 

    public void setBooktype(String booktype) {

       this.booktype = booktype;

    }

 

    public String getBookname() {

       return bookname;

    }

 

    public void setBookname(String bookname) {

       this.bookname = bookname;

    }

 

    public String getIsborrow() {

       return isborrow;

    }

 

    public void setIsborrow(String isborrow) {

       this.isborrow = isborrow;

    }

   

   

    public Integer getPageno() {

       return pageno;

    }

 

    public void setPageno(Integer pageno) {

       this.pageno = pageno;

    }

 

    public Integer getTotal() {

       return total;

    }

 

    public void setTotal(Integer total) {

       this.total = total;

    }

 

    @Override

    public void setSession(Map<String, Object> arg0) {

       this.session=arg0;

    }

 

}

 

编写struts.xml

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE struts PUBLIC

    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"

    "http://struts.apache.org/dtds/struts-2.3.dtd">

 

<struts>

  <!--   开启开发者模式 -->

    <constant name="struts.devMode" value="true" />

    <!-- 中文乱码-->

    <constant name="struts.i18n.encoding" value="utf-8" />   

    <package name="default" namespace="/" extends="struts-default">

     <action name="Book_*"  class="com.demo.action.BookAction" method="{1}" >

     <result>list.jsp</result>

     </action>

    </package>

</struts>

编写页面

<body>

<a href="Book_queryBook.action">进入首页</a>

</body>

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<script type="text/javascript" src="js/jquery-1.8.3.js"></script>

<script type="text/javascript">

function doPage(pageno){

    //.给表单的当前也那么赋值

    $("#pageno").val(pageno);

    //提交查询的表单

    $("#query").submit();

}

function changecheckBox(check){

      $("input[name='bookid']").attr("checked",check);

}

function deleteAll() {

      $("#delete").submit();

}

 

 

</script>

<title>Insert title here</title>

 

</head>

<body>

 

    <div style="height: 600px; width: 800px; margin: 0px auto;">

    <form action="Book_queryBook.action" method="post" id="query">

       图书分类<select name="booktype">

           <option value="0">全部</option>

           <c:forEach items="${bookTypes}" var="type">

              <option value="${type.id}"  <c:if test="${type.id==btype}">selected="selected"</c:if>  >${type.type_name}</option>

           </c:forEach>

       </select>

       &nbsp; 图书名称<input name="bookname" value="${bookname}" >

       &nbsp;是否借阅<select name="isborrow">

       <option value="-1">请选择</option>

      

       <option value="0" <c:if test="${isborrow==0 }">selected="selected" </c:if> >未借阅</option>

       <option value="1" <c:if test="${isborrow==1 }">selected="selected" </c:if>>已借阅</option>

       </select>

           <input type="hidden" name="pageno"  id="pageno" >

           <input type="hidden" name="total"  value="${pageBean.pageTotal}" >

       <input type="submit" value="查询" >

       </form>

       <a href="bookservlet.do?choose=5">添加</a> &nbsp;

       <button onclick="deleteAll();" >批量删除</button>

       <form id="delete" action="bookservlet.do" method="post" >

       <input type="hidden" name="choose" value="7" >

              <table>

           <tr>

               <td><input type="checkbox" onclick="changecheckBox(this.checked);" > </td>

              <td>图书编号</td>

              <td>图书分类</td>

              <td>图书名称</td>

              <td>作者</td>

              <td>出版社</td>

              <td>操作</td>

              <td>详情</td>

              <td>删除</td>

              <td>修改</td>

           </tr>

           <c:forEach items="${pageBean.lists}" var="book">

              <tr>

              <td><input type="checkbox" name="bookid" value="${book.book_id }" ></td>

                  <td>${book.book_code }</td>

                  <td>${book.bookType.type_name }</td>

                  <td>${book.book_name }</td>

                  <td>${book.book_author }</td>

                  <td>${book.publish_press }</td>

                  <td><c:if test="${book.is_borrow ==0 }">未借阅</c:if> <c:if

                         test="${book.is_borrow ==1 }">已借阅</c:if></td>

                  <td><a href="bookservlet.do?choose=2&id=${book.book_code }">详情</a></td>

                  <td><a href="bookservlet.do?choose=3&id=${book.book_code }">删除</a></td>

                  <td><a href="bookservlet.do?choose=4&id=${book.book_code }">修改</a></td>

              </tr>

           </c:forEach>

           <tr>

              <td colspan="9"><a href="javascript:doPage(1);">首页</a>&nbsp;&nbsp;

                  <a href="javascript:doPage(${pageBean.pageNo-1});">上一页</a>&nbsp;&nbsp;

                  <a href="javascript:doPage(${pageBean.pageNo+1});">下一页</a>&nbsp;&nbsp;

                  <a href="javascript:doPage(${pageBean.pageTotal});">末页</a>&nbsp;&nbsp;

                  ${pageBean.pageNo}/${pageBean.pageTotal}</td>

 

           </tr>

       </table>

       </form>

    </div>

</body>

</html>

太复杂了,老老实实学习ssm,使用ssm的pagehelper助手吧。。。

猜你喜欢

转载自blog.csdn.net/viczking/article/details/81177247
今日推荐