分页查询数据上基本上是我们做web网站等项目必须要做功能,基于Hibernate查询的分页查询也是如此。
那么,基于Hibernate的分页查询到底是如何实现的呢?一下我将一一向大家展示,如有任何疑问,欢迎留言。
后台数据查询:
// 分页显示所有的数据
public List pageCountryList(int pageNum, int pageSize) {
// pageSize:每页显示多少条记录
// pageNem:显示第几页
Session sess = HibernateSessionFactory.getSession();
Criteria ctr = sess.createCriteria(TbCountriesName.class);//里面的参数就是数据表映射后对应的实体类(我映射后的实体类叫做TBCountriesName.class)
int firstRow = (pageNum - 1) * pageSize;// 获取第一行
ctr.setFirstResult(firstRow);
ctr.setMaxResults(pageSize);// 每页显示的行数
List list = ctr.list();
return list;
}
代码说明:
分页功能肯定会涉及到当前的显示页以及每页要显示多少条数据。
其中的 pageNum就是我们想每页显示多少条数据;pageSize就是显示第几页的数据。
我们再来写一个方法获取数据库里面的记录的总数(后面会用到):
public List getAllCountiesName() {//得到所有的数据
Session sess = HibernateSessionFactory.getSession();
List list = sess.createCriteria(TbCountriesName.class).list();
//HibernateSessionFactory.closeSession();
return list;
}
以上就是后台与查询相关的代码,我们再来看看如何传递相关的参数以及调用这个方法。
页面代码(与分页查询相关的部分):
TbCountriesNameBean bean = new TbCountriesNameBean();//实例化
List list = bean.getAllCountiesName();
int pagesSize = 3;//每页显示三条数据
String strPages = request.getParameter("pages");//接受提交的页码
if (strPages == null || strPages == "") {
strPages = "1";//初始化传入的数据,获得第一页数据(当用户没有提交页码的时候,默认为第一页)
}
// pages:显示第几页
int pages = Integer.parseInt(strPages);
int num = list.size() % pagesSize;//用总数除以定义的每页显示的数据
int q;//定义一个参数,用作页面的计算
if (num != 0) {
q = list.size() / pagesSize + 1;//如果页数不能被总数整除,就加一
} else {
q = list.size() / pagesSize;
}
List list1 = bean.pageCountryList(pages, pagesSize);
以上就是各种参数的初始化以及方法的调用,我们再来看看jsp页面的相关代码:
<div class="n-p-box clearfix">
<div class="prv">
<%
if (pages != 1) {//当页码不是出于第一页的时候
%>
<a href="countryList.jsp?pages=<%=(pages - 1)%>">上一页</a>
<%
} else {//当页码已经出于第一页,不做页面的计算,且页码调到最后一页
%>
<a href="countryList.jsp?pages=<%=q%>">上一页</a>
<%
}
%>
</div>
<div class="next" style="text-align: right;">
<%
if (pages != q) {
%>
<a href="countryList.jsp?pages=<%=(pages + 1)%>">下一页</a>
<%
} else {//当页码已经出于最后一页,再点击下一页,就会到第一页
%>
<a href="countryList.jsp?pages=<%=1%>">下一页</a>
<%
}
%>
</div>
</div>
以上就是基于Hibernate的分页查询了。是不是非常简单呀?你会了吗?
其实正确地来说,应该是基于Hibernate查询的分页显示,因为上面的代码是把数据库里面的数据查询出来保存起来,再分段读取。
我们来见证一下效果:
你get了吗?赶紧去试试吧,欢迎留言哦。