pageNo
(第幾頁數據),pageSize
(每頁的條數);這裏返回的是json數據接口,實現方法在service層前端
@ResponseBody @GetMapping("/allPage") public String findAllPage( @RequestParam(required = true,defaultValue = "1") Integer pageNo, @RequestParam(required = false,defaultValue = "5") Integer pageSize) { return customerService.findAllPage(pageNo,pageSize); }
CustomerServiceImpl.javavue
@Override public String findAllPage(Integer pageNo, Integer pageSize) { List<Customer> customers = customerDao.findAll(); List<Map<String, String>> resultList = new ArrayList<>(); PageUtil<Customer> pageUtil = new PageUtil<>(); for (Customer customer : pageUtil.pageList(customers, pageNo, pageSize){ resultList.add(iterCustomer(customer)); } return JsonUtil.toJSON(resultList); }
PageUtil.javajava
public class PageUtil<T> { private int beginIndex;//起始索引 private int endIndex;//終止索引 public List<T> pageList(List<T> list, int pageNo, int pageSize) { int size = list.size(); beginIndex = (pageNo - 1) * pageSize; endIndex = pageNo * pageSize > size ? size : pageNo * pageSize; List<T> resultList = list.subList(beginIndex, endIndex); return resultList; } }
iterCustomer()方法git
public Map<String, String> iterCustomer(Customer customer) { Map<String, String> resultMap = new HashMap<>(); resultMap.put("id", customer.getId().toString()); resultMap.put("name", customer.getName()); resultMap.put("phone", customer.getPhone()); resultMap.put("email", customer.getEmail()); return resultMap; }
JsonUtil.javagithub
public class JsonUtil { //使用jackson 轉換 json 數據的第一步 private static ObjectMapper MAPPER = new ObjectMapper(); static String jsonString=null; public static String toJSON(Object object){ try { //jackson轉任意object對象 爲json 字符串 jsonString = MAPPER.writeValueAsString(object); } catch (JsonProcessingException e) { e.printStackTrace(); } return jsonString; } }
第一種方法在數據量比較小時可使用,但當數據量很是大時,若是咱們僅須要某一頁的幾條數據,而去查找全部數據,顯得沒有必要,或者說代價太大,全部咱們如今採用第二種分頁方式;sql
第二種方法與第一種相似,獲取前端傳來的頁碼和每頁顯示的條數,經過自定義SQL語句查詢數據庫來獲得須要的數據;數據庫
sql分頁參考:json
Mysql複雜查詢 或數組
【MySQL】條件查詢之排序聚合分組分頁查詢mybatis
分析
int maxPage =(int) Math.ceil(count/pageSize.doubleValue());
CustomerController.java
@Controller public class CustomerController { @Autowired CustomerService customerService; @ResponseBody @GetMapping("/allSql") public String findAllPageSql( @RequestParam(required = true,defaultValue = "1") Integer pageNo, @RequestParam(required = false,defaultValue = "5") Integer pageSize) { /** * pageSize 是每頁顯示的條數 * pageNo 是頁碼,sql分頁傳遞的第一個參數是開始的索引; * 計算公式:開始的索引 = (當前的頁碼 - 1) * 每頁顯示的條數 */ //數據總數 int count = customerService.count(); //計算最大頁碼 int maxPage =(int) Math.ceil(count/pageSize.doubleValue()); //當前頁碼超出最大頁碼返回最大頁碼值: pageNo = pageNo>maxPage?maxPage:pageNo; //分頁開始的索引值 int index = (pageNo - 1) * pageSize > count ? count : (pageNo - 1) * pageSize; return customerService.findAllPageSql(index, pageSize); } }
CustomerServiceImpl.java
@Service public class CustomerServiceImpl implements CustomerService { @Autowired CustomerDao customerDao; @Override public String findAllPageSql(Integer index, Integer pageSize) { return JsonUtil.toJSON(customerDao.findAllPageSql(index, pageSize)); } }
CustomerDao.java
public interface CustomerDao { List<Customer> findAllPageSql(Integer index,Integer pageSize); }
CustomerMapper.xml
注意,這裏參數爲兩個,獲取參數時要使用#{param1}#{param2},或者經過封裝Map的形式傳參;
sql分頁參考:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.vue.dao.CustomerDao"> <select id="findAllPageSql" parameterType="java.lang.Integer" resultType="com.vue.entity.Customer"> SELECT * FROM t_customer LIMIT #{param1},#{param2} </select> </mapper>
Mapper.xml映射文件獲取多個參數參考:
Mybatis中的Mapper.xml映射文件sql查詢接收多個參數 或
Mybatis中的Mapper.xml映射文件sql查詢接收多個參數