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>