MySql实现翻页查询功能
首先明确为什么要使用分页查询,因为数据庞大,查询不可能全部显示在页面上,如果全部显示在页面上,也会造成查询速度慢的情况,所以分页查询解决了①数据查询;②性能优化,等(其他问题欢迎补充)的问题。
分页查询也分为真分页和假分页:
真分页:基于数据库查出的数据直接分页显示,优点是改变数据库数据不会影响查询结果,缺点是速度稍慢。
假分页:将所有数据查询出的数据,封装到list集合缓存中,表现层方法调用执行。由于将数据封装为集合放入了内存中,所以速度较快,但缺点是数据库改变后,会出现不匹配的情况。
两种分页各有优缺点,小伙伴们视具体情况使用吧。
下面要介绍的就是真分页的方法:
1、建立javabean
import java.io.serializable; /** * 用户实体类 * @author * */ public class userbean implements serializable { /**用户id*/ private int id; /**用户名字*/ private string name; public userbean() { } public userbean(int id, string name) { this.id = id; this.name = name; } public int getid() { return id; } public void setid(int id) { this.id = id; } public string getname() { return name; } public void setname(string name) { this.name = name; } @override public string tostring() { return "userbean [id=" + id + ", name=" + name + "]"; } }
2、用于展示分页数据的javabean
/** * 用于展示分页数据的javabean对象 * @author * */ import java.util.list; public class pagenationbean { /** 当前页数 */ private integer currpage; /** 总页数 */ private integer totalpage; /** 用于展示的table数据 */ private list<userbean> datalist; public integer getcurrpage() { return currpage; } public void setcurrpage(integer currpage) { this.currpage = currpage; } public integer gettotalpage() { return totalpage; } public void settotalpage(integer totalpage) { this.totalpage = totalpage; } public list<stubean> getdatalist() { return datalist; } public void setdatalist(list<stubean> datalist) { this.datalist = datalist; } }
3、dao层实现类
@override public int gettotalcount() { //计算总的数据条数 this.setconnection(); int totalcount = 0; try { ps = con.preparestatement("select count(*) from t_user"); rs = ps.executequery(); if (rs.next()) { totalcount = rs.getint(1); } } catch (exception e) { e.printstacktrace(); } finally { this.closeconnection(); } return totalcount; } @override public list<userbean> getuserlistbystartindex(int startindex) { //根据传入的limit第一位参数得到该参数后面的10条数据 list<userbean> userlist = new arraylist<>(); userbean userbean= null; this.setconnection(); int totalcount = 0; try { ps = con.preparestatement("select * from t_user limit ? , 10"); ps.setint(1, startindex); rs = ps.executequery(); while (rs.next()) { userbean= new stubean(); userbean.setid(rs.getint("id")); userbean.setname(rs.getstring("name")); stulist.add(userbean); } } catch (exception e) { e.printstacktrace(); } finally { this.closeconnection(); } return userlist; }
4、service层实现类
private iuserdao isd = new userdaoimpl(); @override public int gettotalpage() { //得到数据据条数 int totalcount = isd.gettotalcount(); //计算总页数公式 int totalpage = (totalcount + 10 -1)/10; return totalpage; } @override public list<userbean> getuserlistbycurrpage(int currpage) { //通过当前页计算起始索引 int startindex = (currpage - 1) * 10; list<userbean> userlist = isd.getstulistbystartindex(startindex); return userlist; }
5、将查询出的数据放入页面展示就ok了。
以上方法中,分页显示的是10条数据,计算分析如下:
数据总条数: totalcount
每页显示条数: pagesize
总页数: totalpage
起始索引 startindex
当前页数 currpage
总页计算公式:
totalcount % pagesize
如果余数为0 ——> totalpage=totalcount / pagesize
如果余数不为0 ——> totalpage=totalcount / pagesize +1
得出结论:totalpage = (totalcount + pagesize -1)/pagesize
总结
以上所述是小编给大家介绍的mysql实现翻页查询功能,希望对大家有所帮助
上一篇: 深入浅析Node环境和浏览器的区别