mysql翻页_MySql翻页查询

分页查询在网页中随处可见,那原理是什么呢?下面简单介绍一下基于MySql数据库的limit实现方法。

首先明确为什么要使用分页查询,因为数据庞大,查询不可能全部显示在页面上,如果全部显示在页面上,也会造成查询速度慢的情况,所以分页查询解决了①数据查询;②性能优化,等(其他问题欢迎补充)的问题。

分页查询也分为真分页和假分页:

真分页:基于数据库查出的数据直接分页显示,优点是改变数据库数据不会影响查询结果,缺点是速度稍慢。

假分页:将所有数据查询出的数据,封装到list集合缓存中,表现层方法调用执行。由于将数据封装为集合放入了内存中,所以速度较快,但缺点是数据库改变后,会出现不匹配的情况。

两种分页各有优缺点,小伙伴们视具体情况使用吧。

下面要介绍的就是真分页的方法:

1、建立JavaBean

importjava.io.Serializable;/*** 用户实体类

*@author**/

public class UserBean implementsSerializable {/**用户ID*/

private intid;/**用户名字*/

privateString name;publicUserBean() {

}public UserBean(intid, String name) {this.id =id;this.name =name;

}public intgetId() {returnid;

}public void setId(intid) {this.id =id;

}publicString getName() {returnname;

}public voidsetName(String name) {this.name =name;

}

@OverridepublicString toString() {return "UserBean [id=" + id + ", name=" + name + "]";

}

}

2、用于展示分页数据的JavaBean

/*** 用于展示分页数据的JavaBean对象

*@author**/

importjava.util.List;public classPagenationBean {/**当前页数*/

privateInteger currPage;/**总页数*/

privateInteger totalPage;/**用于展示的table数据*/

private ListdataList;publicInteger getCurrPage() {returncurrPage;

}public voidsetCurrPage(Integer currPage) {this.currPage =currPage;

}publicInteger getTotalPage() {returntotalPage;

}public voidsetTotalPage(Integer totalPage) {this.totalPage =totalPage;

}public ListgetDataList() {returndataList;

}public void setDataList(ListdataList) {this.dataList =dataList;

}

}

3、dao层实现类

@Overridepublic intgetTotalCount() { //计算总的数据条数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();

}returntotalCount;

}

@Overridepublic List getUserListByStartIndex(int StartIndex) { //根据传入的limit第一位参数得到该参数后面的10条数据

List 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= newStuBean();

userBean.setId(rs.getInt("id"));

userBean.setName(rs.getString("name"));

stuList.add(userBean);

}

}catch(Exception e) {

e.printStackTrace();

}finally{this.closeConnection();

}returnuserList;

}

4、service层实现类

private IUserDao isd = new UserDaoImpl();

@Overridepublic intgetTotalPage() {//得到数据据条数

int totalCount =isd.getTotalCount();//计算总页数公式

int totalPage = (totalCount + 10 -1)/10;returntotalPage;

}

@Overridepublic List getUserListByCurrPage(intcurrPage) {//通过当前页计算起始索引

int StartIndex = (currPage - 1) * 10;

List userList =isd.getStuListByStartIndex(StartIndex);returnuserList;

}

5、将查询出的数据放入页面展示就OK了。

以上方法中,分页显示的是10条数据,计算分析如下:

数据总条数:  totalCount

每页显示条数: pageSize

总页数:    totalPage

起始索引    StartIndex

当前页数    currPage

总页计算公式:

totalCount % pageSize

如果余数为0 ——> totalPage=totalCount / pageSize

如果余数不为0 ——> totalPage=totalCount / pageSize +1

得出结论:totalPage = (totalCount + pageSize -1)/pageSize

欢迎指正不足之处!

The END

你可能感兴趣的:(mysql翻页)