采用DAO層設(shè)計(jì)模式
詳解
1.dao包:1.通用Dao類(實(shí)現(xiàn)增刪改查)2.EmpDao(實(shí)現(xiàn)Emp的一些操作)3.EmpDaoImpl(具體操作Emp操作的類)
2.pojo具體類包1.Emp類
3.工具類包 1.JDBCTools 2.Page
4.測(cè)試類包
思想:用面向?qū)ο蟮乃季S進(jìn)行思考,進(jìn)行分頁(yè)就要建立一個(gè)頁(yè)碼類
1.頁(yè)碼類應(yīng)該有當(dāng)前頁(yè)碼的屬性
2.上一頁(yè)下一頁(yè)也就是對(duì)當(dāng)前頁(yè)碼的操作,因此建立兩個(gè)對(duì)當(dāng)前頁(yè)碼操作的方法
3.而首頁(yè)可以讓當(dāng)前頁(yè)等于1,尾頁(yè)需要等于總頁(yè)數(shù)
4.因此我們需要一個(gè)總頁(yè)數(shù)屬性
5.總頁(yè)數(shù)就等于數(shù)據(jù)庫(kù)數(shù)據(jù)的條數(shù)%每一頁(yè)的數(shù)據(jù)
6.這樣每一頁(yè)就可以對(duì)應(yīng)一定數(shù)量數(shù)量的數(shù)據(jù),這是我們要建立一個(gè)集合裝每一頁(yè)的數(shù)據(jù)。
7.如何通過(guò)頁(yè)碼對(duì)應(yīng)數(shù)據(jù)庫(kù)的數(shù)據(jù)呢?,這樣我們就可以用到limit這個(gè)方法了
public class Page <T>{
private int pageNo; //當(dāng)前頁(yè)
private int pageSize; //每一頁(yè)的數(shù)據(jù)個(gè)數(shù)
private int totalNum; //總數(shù)據(jù)
private List<T> list=new ArrayList<>(); //裝數(shù)據(jù)的集合
//這里可以通過(guò)get或者set方法控制當(dāng)前頁(yè)是合法
public int getPageNo() {
if(pageNo<1){ //當(dāng)前頁(yè)小于1,返回1
return 1;
}
if(pageNo>getTotalPageNum()){ //大于總頁(yè)數(shù),返回總后一頁(yè)
return getTotalPageNum();
}
return pageNo;
}
public void setPageNo(int pageNo) {
this.pageNo = pageNo;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getTotalNum() {
return totalNum;
}
public void setTotalNum(int totalNum) {
this.totalNum = totalNum;
}
public int getTotalPageNum(){ //得到總頁(yè)數(shù)
if(totalNum%pageSize==0){ //總數(shù)據(jù)除以每頁(yè)的數(shù)據(jù)條數(shù)
return totalNum%pageSize;
}else{
return totalNum%pageSize+1;
}
}
//獲取上一頁(yè)
public int getPrePage()
{
if(getPageNo() > 1)
return getPageNo() - 1;
return getPageNo();
}
//獲取下一頁(yè)
public int getNextPage()
{
if(getPageNo() < getTotalPageNum())
return getPageNo() + 1;
return getPageNo();
}
public Page(int pageNo, int pageSize, int totalNum, List<T> list) {
super();
this.pageNo = pageNo;
this.pageSize = pageSize;
this.totalNum = totalNum;
this.list = list;
}
public List<T> getList() {
return list;
}
public void setList(List<T> list) {
this.list = list;
}
}
具體實(shí)現(xiàn)類里包括分頁(yè)操作
public class EmpDAOImpl extends DAO<Emp> implements EmpDAO{
@Override
public int getCount() throws Exception { //用于獲取分頁(yè)的總數(shù)據(jù)是多少
Connection conn = JDBCTools.getConnection();
String sql = "SELECT count(*) from emp";
Long in = queryForColumn(conn, sql);
int ins=Integer.parseInt(""+in);
return ins;
}
@Override
public Page<Emp> findAll(int pageNo) throws Exception { //獲取當(dāng)前頁(yè)碼的數(shù)據(jù)
Connection conn=JDBCTools.getConnection();
int begin=(pageNo-1)*3;
String sql="select * from emp Limit ?,3";
List<Emp> list=queryForList(conn, sql,begin);
Page page=new Page<>(pageNo, 3, (int)getCount(), list);
return page;
}
}
測(cè)試類中上一頁(yè),下一頁(yè)調(diào)用page里的方法獲取當(dāng)前頁(yè)數(shù)就可以,首頁(yè),尾頁(yè),只需要把當(dāng)前頁(yè)數(shù)設(shè)置為1和最后一頁(yè)就可以了