添加分页工具类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 pageno为null if未进入 // 分页进入action的时候 pageNo 有值, 调用setPageNo()方法 设置的时候 由于PageBean类中pageTotal为null会报空指针错 //所以 分页查询的时候 需要将第一次查询出来的总页码数 传给PageBean类中pageTotal if (total!=null) { page.setPageTotal(total); }
if (pageno !=null) { page.setPageNo(pageno); } PageBean<Book> pageBean= bookService.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> 图书名称<input name="bookname" value="${bookname}" > 是否借阅<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> <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> <a href="javascript:doPage(${pageBean.pageNo-1});">上一页</a> <a href="javascript:doPage(${pageBean.pageNo+1});">下一页</a> <a href="javascript:doPage(${pageBean.pageTotal});">末页</a> ${pageBean.pageNo}/${pageBean.pageTotal}页</td>
</tr> </table> </form> </div> </body> </html> |
太复杂了,老老实实学习ssm,使用ssm的pagehelper助手吧。。。