struts+spring+hibernate实现数据库记分页显示

 
struts+spring+hibernate 实现数据库记分页显示
要分页就必须要有取数据库的起始位置和取多少记录,还有要有总记录
spring 来结合 hibernate 实现分页,
首先创建一个 PageBean.java
package com.binghe.spring;
public class PageBean {
 private int count = 0; //
记录总数
 private int pageSize = 20; // 每页显示记录数
 private int pageCount = 0; // 总页数
 private int page = 1; // 当前页数
 private String totalCountSQL;// 得到总记录数 sql 语句
 private String listSQL;// 得到查询记录 sql 语句
 public int getCount() {
  return count;
 }
 public void setCount(int count) {
  if (pageSize != 0) {
   pageCount = count / pageSize;
   if (count % pageSize != 0) {
    pageCount++;
   }
  }
  this.count = count;
 }
 public String getListSQL() {
  return listSQL;
 }
 public void setListSQL(String listSQL) {
  this.listSQL = listSQL;
 }
 public int getPage() {
  return page;
 }
 public void setPage(int page) {
  this.page = page;
 }
 public int getPageCount() {
  return pageCount;
 }
 public void setPageCount(int pageCount) {
  this.pageCount = pageCount;
 }
 public int getPageSize() {
  return pageSize;
 }
 public void setPageSize(int pageSize) {
  this.pageSize = pageSize;
 }
 public String getTotalCountSQL() {
  return totalCountSQL;
 }
 public void setTotalCountSQL(String totalCountSQL) {
  this.totalCountSQL = totalCountSQL;
 }
}
第二,创建一个接口: PaginateInterface.java
package com.binghe.spring;
import java.io.Serializable;
import java.util.List;
public interface PaginateInterface extends Serializable {
 public List getList(PageBean page);
 public String getToolsMenu(PageBean page);
 public int getTotalCount(PageBean p, String str[], Object ob2[])
   throws Exception;
 public int getTotalCount(PageBean page) throws Exception;
 public List getList(PageBean page, String str[], Object ob2[])
   throws Exception;
}
第三,创建一个继承 spring org.springframework.orm.hibernate3.support.HibernateDaoSupport 的类 Paginate.java ,原码如下
package com.binghe.spring;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
public class Paginate extends HibernateDaoSupport implements PaginateInterface {
 /**
  *
显示用的菜单
  */
 public String getToolsMenu(PageBean p) {
  StringBuffer str = new StringBuffer("");
  int next, prev;
  prev = p.getPage() - 1;
  next = p.getPage() + 1;
  if (p.getPage() > 1) {
   str
     .append("<a href=/"#/" οnclick=/"document.forms(0).pages.value=1;document.forms(0).submit();/">
首页 </a>&nbsp;");
  } else {
   str.append("<a href=/"#/">
首页 </a>&nbsp;");
  }
  if (p.getPage() > 1) {
   str.append("<a href=/"#/" οnclick='document.forms(0).pages.value="
     + prev + ";document.forms(0).submit();'>
上页 </a>&nbsp;");
  } else {
   str.append("<a href=/"#/">
上页 </a>&nbsp;");
  }
  if (p.getPage() < p.getPageCount()) {
   str.append("<a href=/"#/" οnclick='document.forms(0).pages.value="
     + next + ";document.forms(0).submit();'>
下页 </a>&nbsp;");
  } else {
   str.append("<a href=/"#/" >
下页 </a>&nbsp;");
  }
  if (p.getPageCount() > 1 && p.getPage() != p.getPageCount()) {
   str.append("<a href=/"#/"  οnclick='document.forms(0).pages.value="
     + p.getPageCount()
     + ";document.forms(0).submit();'>
末页 </a>&nbsp;&nbsp;");
  } else {
   str.append("<a href=/"#/" >
末页 </a>&nbsp;&nbsp;");
  }
  str.append("
" + p.getCount() + " 条记录 ");
  str
    .append(" 
每页 <SELECT size=1 name=pagesize οnchange='this.form.pages.value=1;this.form.pageSize.value=this.value;this.form.submit();'>");
  if (p.getPageSize() == 3) {
   str.append("<OPTION value=3 selected>3</OPTION>");
  } else {
   str.append("<OPTION value=3>3</OPTION>");
  }
  if (p.getPageSize() == 10) {
   str.append("<OPTION value=10 selected>10</OPTION>");
  } else {
   str.append("<OPTION value=10>10</OPTION>");
  }
  if (p.getPageSize() == 20) {
   str.append("<OPTION value=20 selected>20</OPTION>");
  } else {
   str.append("<OPTION value=20>20</OPTION>");
  }
  if (p.getPageSize() == 50) {
   str.append("<OPTION value=50 selected>50</OPTION>");
  } else {
   str.append("<OPTION value=50>50</OPTION>");
  }
  if (p.getPageSize() == 100) {
   str.append("<OPTION value=100 selected>100</OPTION>");
  } else {
   str.append("<OPTION value=100>100</OPTION>");
  }
  str.append("</SELECT>");
  str.append("
" + p.getPageCount() + " 页显示 转到 ");
  str
    .append("<SELECT size=1 name=Pagelist οnchange='this.form.pages.value=this.value;this.form.submit();'>");
  for (int i = 1; i < p.getPageCount() + 1; i++) {
   if (i == p.getPage()) {
    str.append("<OPTION value=" + i + " selected>" + i
      + "</OPTION>");
   } else {
    str.append("<OPTION value=" + i + ">" + i + "</OPTION>");
   }
  }
  str.append("</SELECT>
");
  str.append("<INPUT type=hidden  value=" + p.getPage()
    + " name=/"pages/" > ");
  str.append("<INPUT type=hidden  value=" + p.getPageSize()
    + " name=/"pageSize/"> ");
  return str.toString();
 }
 public int getTotalCount(PageBean p) throws Exception {
  List list = getHibernateTemplate().find(p.getTotalCountSQL());
  int count = 0;
  if (list.size() > 0) {
   count = ((Integer) list.get(0)).intValue();
  }
  return count;
 }
 public List getList(PageBean p) {
  Session session = this.getSession();
  Query q = session.createQuery(p.getListSQL());
  q.setFirstResult((p.getPage() - 1) * p.getPageSize());
  q.setMaxResults(p.getPageSize());
  return q.list();
 }
 public List getList(PageBean p, String str[], Object ob2[]) {
  Session session = this.getSession();
  Query q = session.createQuery(p.getListSQL());
  for (int i = 0; i < str.length; i++) {
   q.setParameter(str[i], ob2[i]);
  }
  q.setFirstResult((p.getPage() - 1) * p.getPageSize());
  q.setMaxResults(p.getPageSize());
  return q.list();
 }
 public int getTotalCount(PageBean p, String str[], Object ob2[])
   throws Exception {
  List list = getHibernateTemplate().findByNamedParam(
    p.getTotalCountSQL(), str, ob2);
  int count = 0;
  if (list.size() > 0) {
   count = ((Integer) list.get(0)).intValue();
  }
  return count;
 }
}
这样就定义好了分页的准备工作,下面就是怎样使用了。在 spring 中配置好,上面的借口要注入的地方,这是在 spring 配置文件中目标代码的配置代码:
<bean id="paginateProxy"
  class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
  <property name="transactionManager">
   <ref bean="transactionManager" />
  </property>
  <property name="target">
   <ref local="paginate" />
  </property>
  <property name="transactionAttributes">
   <props>
    <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
   </props>
  </property>
 </bean>
注入的地方:在 bookTypeDAO 中要调用目标方法
<bean id="bookTypeDAO"
  class="com.binghe.spring.booktype.BookTypeDAOImp">
  <property name="sessionFactory">
   <ref local="sessionFactory" />
  </property>
  <property name="paginate">
   <ref bean="paginateProxy" />
  </property>
 </bean>
action 中得到页面传来的页数和页面显示的记录数:
public ActionForward displayAll(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response)
   throws Exception {
  HttpSession session = request.getSession();
  ActionMessages errors = new ActionMessages();
  UserBean ub = new UserBean();
  if (session.getAttribute(Constants.SESSION_USER) != null) {
   ub = (UserBean) session.getAttribute(Constants.SESSION_USER);
  } else {
   errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
     "system.logon.not.logon"));
   saveMessages(request, errors);
   return mapping.findForward(Constants.FORWARD_LOGON);
  }
  PageBean page = new PageBean();
  String pagesize = request.getParameter("pagesize");
  String pages = request.getParameter("pages");
  if (pagesize != null) {
   page.setPageSize(Integer.parseInt(pagesize));
  }
  if (pages != null) {
   page.setPage(Integer.parseInt(pages));
  }
  try {
   List bts = bookTypeDAO.findAllBookType(page);
   request.setAttribute(Constants.KEY_BOOKTYPES, bts);
  } catch (Exception e) {
   e.printStackTrace();
  }
  request.setAttribute("toolsmenu", bookTypeDAO.getPaginate()
    .getToolsMenu(bookTypeDAO.getPageBean()));
  return mapping.findForward(Constants.FORWARD_SUCCESS);
 }
下面是 BookDAO 接口代码:
package com.binghe.spring.booktype;
import java.io.Serializable;
import java.util.List;
import com.binghe.hibernate.booktype.BookType;
import com.binghe.spring.PageBean;
import com.binghe.spring.PaginateInterface;
public interface BookTypeDAO extends Serializable {
 public abstract PaginateInterface getPaginate();
 public abstract PageBean getPageBean();
 public abstract boolean checkBookTypeIsValid(String name) throws Exception;
 public abstract void addBookType(BookType bookType) throws Exception;
 public abstract void updateBookType(BookType bookType) throws Exception;
 public abstract void deleteBookType(Integer id) throws Exception;
 public abstract void deleteAllBookType(String ids[]) throws Exception;
 public abstract BookType findBookTypeById(Integer id) throws Exception;
 public abstract List findAllBookType() throws Exception;
 public abstract List findAllBookType(PageBean page) throws Exception;
}
下面是 BookDAOImp 中的调用代码:
package com.binghe.spring.booktype;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.binghe.hibernate.booktype.BookType;
import com.binghe.utils.DeptBean;
import com.binghe.spring.PageBean;
import com.binghe.spring.Paginate;
import com.binghe.spring.PaginateInterface;
import com.binghe.utils.UserBean;
public class BookTypeDAOImp extends HibernateDaoSupport implements BookTypeDAO {
 private PaginateInterface paginate;
 private PageBean pageBean = new PageBean();
 public PageBean getPageBean() {
  return pageBean;
 }
 public void setPageBean(PageBean pageBean) {
  this.pageBean = pageBean;
 }
 public PaginateInterface getPaginate() {
  return paginate;
 }
 public void setPaginate(PaginateInterface paginate) {
  this.paginate = paginate;
 }
 public void addBookType(BookType bookType) throws Exception {
  this.getHibernateTemplate().save(bookType);
 }
 public boolean checkBookTypeIsValid(String name) throws Exception {
  String names[] = new String[1];
  names[0] = name;
  boolean valid = false;
  List list = this.getHibernateTemplate().find(
    "select b.id from BookType b where b.name=?", names);
  if (list.size() > 0) {
   valid = true;
  }
  return valid;
 }
 public void updateBookType(BookType bookType) throws Exception {
  this.getHibernateTemplate().update(bookType);
 }
 public BookType findBookTypeById(Integer id) throws Exception {
  String sql = "select b,u.userName,d.deptName "
    + " from BookType b,UserBean u,DeptBean d "
    + " where b.userId=u.OID and u.deptOID=d.OID and b.id=:id";
  List list = this.getHibernateTemplate().findByNamedParam(sql, "id", id);
  Iterator it = list.iterator();
  BookType b = null;
  UserBean u = new UserBean();
  DeptBean d = new DeptBean();
  if (it.hasNext()) {
   Object o[] = (Object[]) it.next();
   b = (BookType) o[0];
   u.setUserName((String) o[1]);
   d.setDeptName((String) o[2]);
   u.setDept(d);
   b.setUser(u);
  }
  return b;
 }
 public List findAllBookType() throws Exception {
  List bookTypes = new ArrayList();
  String sql = "select b,u.userName,d.deptName "
    + " from BookType b,UserBean u,DeptBean d "
    + " where b.userId=u.OID and u.deptOID=d.OID";
  List list = this.getHibernateTemplate().find(sql);
  Iterator it = list.iterator();
  while (it.hasNext()) {
   Object o[] = (Object[]) it.next();
   BookType b = null;
   UserBean u = new UserBean();
   DeptBean d = new DeptBean();
   b = (BookType) o[0];
   u.setUserName((String) o[1]);
   d.setDeptName((String) o[2]);
   u.setDept(d);
   b.setUser(u);
   bookTypes.add(b);
  }
  if (bookTypes.size() > 0)
   return bookTypes;
  return null;
 }
 public List findAllBookType(PageBean p) throws Exception {
  List bookTypes = new ArrayList();
  String sql = "select b,u.userName,d.deptName "
    + " from BookType b,UserBean u,DeptBean d "
    + " where b.userId=u.OID and u.deptOID=d.OID";
  String sql2 = "select count(*) from BookType";
  p.setListSQL(sql);
  p.setTotalCountSQL(sql2);
  p.setCount(this.getPaginate().getTotalCount(p));
  this.setPageBean(p);
  List list = this.getPaginate().getList(p);
  Iterator it = list.iterator();
  while (it.hasNext()) {
   Object o[] = (Object[]) it.next();
   BookType b = null;
   UserBean u = new UserBean();
   DeptBean d = new DeptBean();
   b = (BookType) o[0];
   u.setUserName((String) o[1]);
   d.setDeptName((String) o[2]);
   u.setDept(d);
   b.setUser(u);
   bookTypes.add(b);
  }
  if (bookTypes.size() > 0)
   return bookTypes;
  return null;
 }
 public void deleteBookType(Integer id) throws Exception {
  BookType bookType = (BookType) this.getHibernateTemplate().load(
    BookType.class, id);
  getHibernateTemplate().delete(bookType);
 }
 public void deleteAllBookType(String ids[]) throws Exception {
  List list = new ArrayList();
  for (int i = 0; i < ids.length; i++) {
   BookType bookType = (BookType) this.getHibernateTemplate().load(
     BookType.class, new Integer(ids[i]));
   list.add(i, bookType);
  }
  getHibernateTemplate().deleteAll(list);
 }
}
这是我写的一个项目中抽取的代码,上面全是代码形式没有文字说明,如果有经验的话我觉得会看懂的,看不懂的话可以发表评论。
 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值