采用DAO层设计模式
详解
1.dao包:1.通用Dao类(实现增删改查)2.EmpDao(实现Emp的一些操作)3.EmpDaoImpl(具体操作Emp操作的类)
2.pojo具体类包1.Emp类
3.工具类包 1.JDBCTools 2.Page
4.测试类包
思想:用面向对象的思维进行思考,进行分页就要建立一个页码类
1.页码类应该有当前页码的属性
2.上一页下一页也就是对当前页码的操作,因此建立两个对当前页码操作的方法
3.而首页可以让当前页等于1,尾页需要等于总页数
4.因此我们需要一个总页数属性
5.总页数就等于数据库数据的条数%每一页的数据
6.这样每一页就可以对应一定数量数量的数据,这是我们要建立一个集合装每一页的数据。
7.如何通过页码对应数据库的数据呢?,这样我们就可以用到limit这个方法了
public class Page <T>{
private int pageNo; //当前页
private int pageSize; //每一页的数据个数
private int totalNum; //总数据
private List<T> list=new ArrayList<>(); //装数据的集合
//这里可以通过get或者set方法控制当前页是合法
public int getPageNo() {
if(pageNo<1){ //当前页小于1,返回1
return 1;
}
if(pageNo>getTotalPageNum()){ //大于总页数,返回总后一页
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(){ //得到总页数
if(totalNum%pageSize==0){ //总数据除以每页的数据条数
return totalNum%pageSize;
}else{
return totalNum%pageSize+1;
}
}
//获取上一页
public int getPrePage()
{
if(getPageNo() > 1)
return getPageNo() - 1;
return getPageNo();
}
//获取下一页
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;
}
}
具体实现类里包括分页操作
public class EmpDAOImpl extends DAO<Emp> implements EmpDAO{
@Override
public int getCount() throws Exception { //用于获取分页的总数据是多少
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 { //获取当前页码的数据
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;
}
}
测试类中上一页,下一页调用page里的方法获取当前页数就可以,首页,尾页,只需要把当前页数设置为1和最后一页就可以了
网友评论