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;
pprev = 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> ");
} else {
str.append("<a href=/"#/">首页</a> ");
}
if (p.getPage() > 1) {
str.append("<a href=/"#/" οnclick='document.forms(0).pages.value="
+ prev + ";document.forms(0).submit();'>上页</a> ");
} else {
str.append("<a href=/"#/">上页</a> ");
}
if (p.getPage() < p.getPageCount()) {
str.append("<a href=/"#/" οnclick='document.forms(0).pages.value="
+ next + ";document.forms(0).submit();'>下页</a> ");
} else {
str.append("<a href=/"#/" >下页</a> ");
}
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> ");
} else {
str.append("<a href=/"#/" >末页</a> ");
}
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);
}

}  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值