ページングクエリは、Webページでどこでも見ることができ、それがどのような原則ですか?MySQLデータベースに基づいて、簡単な制限の実装を以下に示します。
すべてのページに表示される場合は、最初の明確な理由を使用ページングクエリ、データが大きいため、クエリはスロークエリの場合原因も、ページ上のすべてをすることができます表示することはできません、ページングクエリデータのクエリは、①解決しました。②パフォーマンスの最適化、などの問題を(他の問題を追加してください)。
ページネーションクエリはまた、真と偽のページネーションのページネーションに分けることができます。
真のページ:絶縁ベースのデータベースのデータを直接改ページ、利点は、データベースのデータは、結果には影響しません変更することで、欠点が遅くなります。
偽ページ:コレクションリストキャッシュと呼ばれるプレゼンテーション層メソッドにデータパッケージのすべてのデータをチェックしてください。以来データはように速く、メモリにセットとしてパッケージ化されていますが、欠点は、データベースの変更で、不一致があるでしょう。
ページの二種類が少し友人がそれを使用する特定の状況に応じて、長所と短所を持っています。
ページングは、以下のことを紹介する真の方法です:
1、JavaBeanの確立
インポートしたjava.io.Serializable;
/ **
*ユーザエンティティクラス
* @author
*
* /
パブリック クラス UserBeanの実装Serializableを{
/ ** ユーザID * /
プライベート int型のID;
/ ** ユーザー名* /
プライベート文字列名;
公共UserBeanの(){
}
公共 UserBeanの(int型のID、文字列名){
この .ID = ID;
この .nameの= 名;
}
公共 のint のgetId(){
戻り値のID。
}
公共 ボイド SETID(int型のID){
この .ID = ID。
}
パブリック文字列のgetName(){
戻り名。
}
公共 ボイドのsetName(文字列名){
この .nameの= 名前。
}
@Override
パブリック文字列のtoString(){
リターン "UserBeanの[ID =" + ID + "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
欢迎指正不足之处!
The END