SELECT * FROM student LIMIT FROM,TO
分页无非就是实现了上面这个SQL语句,首先获取查询条件,然后获得limit这里的From和To的值不就结束了
在数据库中做分页查询的时候,我们要想知道获取数据的起始位置和结束位置,就要知道每页显示的数据个数,我们可以根据数据总个数和每页显示的数据个数算出来总页数。
Page类
public class PageBean<T> (){
// 1.当前页数 从页面获取
private int currentPage;
// 2.每页显示数据个数,赋初值或者setter获取
private int currentCount;
// 3.总条数,从数据库获取
private int totalRecord;
// 4.总页数,计算得到
private int totalPage;
// 5.每页的显示数据,数据库得到
List<T> list = new ArrayList<>();
getter()和setter()方法
}
SearchRequest类
public class SearchRequest {
private Integer From;
private Integer pageSize;
//.....其他查询条件
private String name;
private String age;
getter()和setter()方法
}
Controller层
@RequestMapping(value = "/Page.action")
public @ResponseBody PageBean<> SearchRecordPage(SearchRequest searchRequest,PageBean pageBean) {
//
int totalRecord=service.getPageSize(searchRequest);
pageBean.setTotalRecord(totalRecord);
pageBean.setTotalPage((int) Math.ceil((pageBean.getTotalRecord()*1.0)/pageBean.getCurrentCount()));
//获取当前点击页面的数据(pageBean前台传错来一个页面显示多少条,和页码数)
List<> list = service.getRecord(searchRequest,pageBean);
//返回前台数据
pageBean.setList(list);
return pageBean;
}
Service的书写
public List<T> getRecord(SearchRequest searchRequest, PageBean<ResultClassName> pageBean) {
//数据库进行分页的方法searchrequest加入from 和to
//当前页面
int currentPage=pageBean.getCurrentPage();
//页面的显示个数
int currentCount=pageBean.getCurrentCount();
//根据页面算出数据库查询的起始位置
int from=currentCount*(currentPage-1);
//获取的数据个数
int pageSize=currentCount;
//将查询范围在查询条件里
searchRequest.setFrom(From);
searchRequest.setPageSize(pageSize);
//根据以上条件返回目的对象
pageBean.setList( Mapper.getRecord(searchRequest));
return pageBean;
}
Sql的写法
<select id="getRepairRecord" resultType="ResultClassName"
parameterType="SearchRequest">
SELECT *
FROM 表名
<where>
<if test="name!=null and name!=''">
and name=#{name}</if>
<if test="age!=null and age!=''">
and age=#{age}
</if>
</where>
<if test="From!=null and pageSize!=null">
limit #{From},#{pageSize}
</if>
</select>