hibernate.uti
/**
* 获取某张表的记录条数
*
* @param hql
* 含条件的HQL语句
* @param reg
* 占位符对应的参数列表
* @return 返回符合条件的记录条数
*/
public int queryCount(String hql, Object... reg) {
Session session = null;
Query query = null;
int count = 0;
try {
session = factory.openSession();
query = session.createQuery(hql);
for (int i = 0; reg != null && i < reg.length; i++) {
query.setString(i, reg[i].toString());
}
count = Integer.parseInt(query.list().size()+"");
} catch (Exception e) {
e.printStackTrace();
} finally {
if (session != null) {
session.close();
}
}
return count;
}
/**
* 根据条件查询多条记录
*
* @param <T>返回集合中存放的对象类型
* @param hql
* 查询所需的HQL语句
* @param arg
* HQL语句中?站位符号对应参数的顺序数组
* @param size
* 每页显示的条数[可选]
* @param pages
* 要的是第几页的数据从1开始[可选]
* @return 符合条件的对象集合
*/
public <T> List<T> queryListPages(int pages, int size, String hql,
Object... arg) {
Session session = null;
Query query = null;
List<T> list = null;
try {
session = factory.openSession();
query = session.createQuery(hql);
for (int i = 0; arg != null && i < arg.length; i++) {
query = query.setString(i, arg[i].toString());
}
if (size != 0 && pages != 0) {
query.setFirstResult(size * (pages - 1)); // 分页时候设定数据开始位置
query.setMaxResults(size); // 设置每页显示多少条
}
list = query.list();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (session != null)
session.close();
}
return list;
}
l
dao.impl
/**实现分页*/
public <T> List<T> queryByPage(String hql, int pages, int size,
Object... param) {
// TODO Auto-generated method stub
return hc.queryListPages(pages, size, hql, param);
}
/**查询总记录数*/
public int findCount(String hql, Object... param) {
// TODO Auto-generated method stub
return hc.queryCount(hql, param);
}
biz.impl
/**查询总记录数*/
public int findcount() {
// TODO Auto-generated method stub
return baseDao.findCount("from P_Login");
}
/**实现分页*/
public List<P_Login> query(int pages, int size) {
// TODO Auto-generated method stub
return baseDao.queryByPage("from P_Login", pages, size);
}
action
public class QueryAllUsersAction {
private String message;
private P_Login login;
private List<P_Login> list;
private int page;//当前页
private int size = 5;// 每页显示大小
private int total;// 总页数
/**省略get,set方法*/
public String execute() {
// 判断当前页是否为第一页
if (page <= 0) {
page = 1;
}
// 判断总记录数是否为0
if (total <= 0) {
// 获得总记录数
total = biz.findcount();
// 获得总页数
total = total % size == 0 ? total / size : total / size + 1;
}
if(page>total){
page=total;
}
list=biz.query(page, size);
if(list.size()>0)
return "success";
else{
setMessage("查询失败!");
return "faile";
}
}
jsp
<div class=pages align="right">
<%
int i = 1;
%>
<a href="action?page=1" class="prev">首页</a>
<a href="action?page=${page-1 }" class="last">上一页</a>
<c:forEach begin="1" end="${total}" var="n">
<c:if test="${page==n}">
<a class="pgcurrent" href="action?page=<%=i%>"><font color="red" style=" font-size: 25px; border-color: blue; "><%=i++%></font></a>
</c:if>
<c:if test="${page!=n}">
<a href="action?page=<%=i%>"><%=i++%></a>
</c:if>
</c:forEach>
<a href="action?page=${page+1 }" class="next">下一页</a>
<a href="action?page=${total }" class="next">尾页</a>
</div>