高级查询就三步骤;
- 将页面请求来的查询数据,封装成一个XXXQuery对象.
- 在XXXDAOImpl中,声明方法public Page getPage(Query对象)
- Action中,调用方法得到Page对象,并响应.
query对象作用:拼接sql语句,生成sql的参数列表.用于处理请求.
getPage方法作用:将生成的查询结果封装成page对象
page对象作用: 里面是页面内容,包括页码信息,高级查询结果.用于响应.
Page<T>
类
page对象是页面的封装信息,用于响应给浏览器的对象.那么必须由以下8个信息.
这四个是外界提供的,由构造器传入
1. 总信息条数 ———dao.getPage() 通过Query对象的查总数hql
2. 当前页—————请求放过来的 封装于Query对象
3. 每页信息数 ———请求发过来 封装于Query对象
4. 高级查询结果——-dao.getPage() 通过Query对象查列表的list
这四个是自己生成的,由构造器声明
1. 上一页: ————当前页==1?当前页:当前页-1
2. 尾页—————-总信息条数%每页信息数==0?0:总信息条数/每页信息数+1
3. 下一页 ————-当前页==尾页?尾页:当前页+1
4. 首页 —————-1
public class Page<T> {
private Integer nextPage; //下一页
private Integer prevPage; //上一页
private Integer firstPage; //首页
private Integer lastPage; //尾页
private Integer totalCount; //总信息条数
private Integer currentPage; //当前页
private Integer pageSize; //每页信息数
private T list; //高级查询结果
public Page(Integer totalCount, Integer currentPage, Integer pageSize,
T list) {
//四个传入
this.totalCount = totalCount;
this.currentPage = currentPage;
this.pageSize = pageSize;
this.list = list;
//四个声明
this.firstPage=1;
this.lastPage=totalCount%pageSize==0?totalCount/pageSize:totalCount/pageSize+1;
this.nextPage=currentPage==lastPage?lastPage:currentPage+1;
this.prevPage=currentPage==firstPage?firstPage:currentPage-1;
}
//省略setter getter toString
}
Query类
1.制定规范:IQuery
从Page类中,得知需要四个形参才可以创建page对象
Query要做的是提供六个参数给dao:
1.提供当前页currentPage.
2.提供每页信息数pageSize.
3.提供查询列表的条件hql:listHQL
4.提