1. 程式人生 > 實用技巧 >SpringBoot + Mybatis分頁查詢實現(前端後端均呈現)

SpringBoot + Mybatis分頁查詢實現(前端後端均呈現)

工具:

idea2019

前端模擬實現:postman

分頁查詢實現先做準備工作。

一、準備工作

1. 定義PageBean實體類,記錄分頁資訊

package testdemo.util;

public class PageBean {
    private Integer currentPage;
    private Integer startIndex;
    private Integer pageSize=5;
    private Integer totalCount;
    private Integer totalPage;

    public Integer getCurrentPage() {
        
return currentPage; } public void setCurrentPage(Integer currentPage) { this.currentPage = currentPage; this.startIndex = (this.currentPage-1)*this.pageSize ; } public Integer getPageSize() { return pageSize; } public void setPageSize(Integer pageSize) {
this.pageSize = pageSize; } public Integer getTotalCount() { return totalCount; } public void setTotalCount(Integer totalCount) { this.totalCount = totalCount; this.totalPage = (int)Math.ceil((this.totalCount*1.0/this.pageSize)); } public Integer getTotalPage() {
return totalPage; } public void setTotalPage(Integer totalPage) { this.totalPage = totalPage; } public Integer getStartIndex() { return startIndex; } public void setStartIndex(Integer startIndex) { this.startIndex = startIndex; } }

準備工作完成,進行分頁查詢。

二、通過傳遞當前頁和頁面大小兩個引數進行分頁,進而查詢所有條資料

1. UserController.java中:

/*
    * 分頁查詢所有條資料
    * */
    @GetMapping("/selectStartIndexAndPageSize")
    public Result select(@RequestParam("currentPage")int currentPage ,
                         @RequestParam("pageSize") int pageSize){
        //PageHelper.startPage(1,2);
        //List<User> userList = userService.select();
        List<User> selectForPage = userService.
                selectForPage1((currentPage-1)*pageSize, pageSize) ;
        for (User user : selectForPage) {
            System.out.println(user);
        }
        return Results.successWithData(selectForPage,
                BaseEnums.SUCCESS.code(),BaseEnums.SUCCESS.desc());

    }

2. UserService.java中:

 /*
    * 分頁查詢1
    * @param 起始頁面
    * @param 資料條數
    * */
    public List<User> selectForPage1(int startIndex , int pageSize);

3. UserServiceImpl.java中:

@Override
    public List<User> selectForPage1(int startIndex , int pageSize){
        return userMapper.selectForPage1(startIndex , pageSize) ;

    }

4. UserMapper.Java中:

//分頁查詢 通過開始頁和資料條數進行查詢
    public List<User> selectForPage1(int startIndex , int pageSize) ;

5. UserMapper.xml中:

<!--查詢1-->
    <select id="selectForPage1" resultType="User">
        select * from sys_user limit #{param1},#{param2}
    </select>

6. 前端實現為:通過引數數值控制分頁首頁和頁面資料多少

三、通過傳遞當前頁和頁面大小兩個引數進行分頁,在傳遞之前將兩個引數裝載為map進行傳遞,進而查詢所有條資料

1. UserController.java中:

/*
     * 查詢所有條資料
     * */
    @GetMapping("/selectByMap")
    public Result select1(@RequestParam("currentPage")int currentPage ,
                          @RequestParam("pageSize") int pageSize){
        //PageHelper.startPage(1,2);
        //List<User> userList = userService.select();
        Map<String , Object> map=new HashMap<>();
        map.put("startIndex" , (currentPage-1)*pageSize);
        map.put("pageSize" , pageSize) ;
        List<User> selectForPage2 = userService.selectForPage2(map) ;
        for (User user : selectForPage2) {
            System.out.println(user);
        }
        return Results.successWithData(selectForPage2,
                BaseEnums.SUCCESS.code(),BaseEnums.SUCCESS.desc());

    }

2. UserService.java中:

/*
    * 分頁查詢2
    * @param map型別
    * */
    public List<User> selectForPage2(Map<String, Object> map);

3. UserServiceImpl.java中:

 public List<User> selectForPage2(Map<String, Object> map){
        
        return userMapper.selectForPage2(map);
    }

4. UserMapper.Java中:

//分頁查詢  通過map進行查詢
    public List<User> selectForPage2(Map<String, Object> map);

5. UserMapper.xml中:

 <!-- 查詢2-->
    <select id="selectForPage2" resultType="User">
        select * from sys_user limit #{startIndex},#{pageSize}
    </select>

6. 前端實現為:通過引數數值控制分頁首頁和頁面資料多少

四、通過傳遞當前頁和頁面大小兩個引數進行分頁,在傳遞之前將兩個引數裝載到pageBean物件中進行傳遞,進而查詢所有條資料

1. UserController.java中:

 /*
     * 查詢所有條資料
     * */
    @GetMapping("/selectByPageBean")
    public Result selectByPageBean(@RequestParam("currentPage")int currentPage ,
                          @RequestParam("pageSize") int pageSize){
        PageBean pageBean = new PageBean() ;
        pageBean.setCurrentPage(currentPage);
        pageBean.setPageSize(pageSize);
        //查詢總條數
        Integer count = userService.selectCount() ;
        //放到pageBean中
        pageBean.setTotalCount(count);
        List<User> userList = userService.selectForPage3(pageBean) ;
        for (User user : userList) {
            System.out.println(user);
        }
        System.out.println("當前第"+pageBean.getCurrentPage()+"頁,共"+count+"條");
        return Results.successWithData(userList,
                BaseEnums.SUCCESS.code(),BaseEnums.SUCCESS.desc());
    }

2. UserService.java中:

//查詢總條數
    public Integer selectCount();

    /*
    * 分頁查詢3 物件
    * */
    public List<User> selectForPage3(PageBean pageBean);

3. UserServiceImpl.java中:

public Integer selectCount(){
        return userMapper.selectCount() ;
    }

    public List<User> selectForPage3(PageBean pageBean){
        return userMapper.selectForPage3(pageBean) ;
    }

4. UserMapper.Java中:

 public Integer selectCount();

    public List<User> selectForPage3(PageBean pageBean);

5. UserMapper.xml中:

  <!-- 查詢總條數-->
    <select id="selectCount" resultType="java.lang.Integer">
        select count(*) from sys_user
    </select>

    <!-- 查詢4-->
    <select id="selectForPage3" resultType="User">
        select * from sys_user limit  #{startIndex},#{pageSize}
    </select>

6. 前端實現為:通過引數數值控制分頁首頁和頁面資料多少

五、通過傳遞當前頁和頁面大小兩個引數進行分頁,同時還要傳遞一個keywords,用於模糊查詢匹配,在傳遞之前將三個引數裝載到map物件中進行傳遞,進而查詢所有條資料。

1. UserController.java中:

/*
     * 模糊查詢後分頁查詢
     * */
    @GetMapping("/selectByLike")
    public Result selectByLike(@RequestParam("keywords")String keywords ,
            @RequestParam("currentPage")int currentPage ,
            @RequestParam("pageSize") int pageSize){
        PageBean pageBean = new PageBean() ;
        pageBean.setCurrentPage(currentPage);
        pageBean.setPageSize(pageSize);
        //查詢總條數
        Integer count = userService.selectCount2(keywords) ;
        //放到pageBean中
        pageBean.setTotalCount(count);
        Map<String , Object> map = new HashMap<>() ;
        map.put("startIndex" , (currentPage-1)*pageSize);
        map.put("pageSize" , pageSize) ;
        map.put("keywords" , keywords) ;
        List<User> userList = userService.selectForPage4(map) ;
        for (User user : userList) {
            System.out.println(user);
        }
        System.out.println("當前第"+pageBean.getCurrentPage()+"頁,共"+count+"條");
        return Results.successWithData(userList,
                BaseEnums.SUCCESS.code(),BaseEnums.SUCCESS.desc());
    }

2. UserService.java中:

//模糊查詢
    public List<User> selectForPage4(Map<String, Object> map) ;

    public Integer selectCount2(String keywords) ;

3. UserServiceImpl.java中:

 public List<User> selectForPage4(Map<String, Object> map){
        return userMapper.selectForPage4(map) ;
    }

    public Integer selectCount2(String keywords){
        return userMapper.selectCount2(keywords) ;
    }

4. UserMapper.Java中:

//模糊查詢符合條件條數
    public Integer selectCount2(String keywords);

    //分頁加模糊查詢
    public List<User> selectForPage4(Map<String, Object> map);

5. UserMapper.xml中:

 <!-- 查詢5-->
    <select id="selectForPage4" resultType="User">
        select * from sys_user
        where username like "%"#{keywords}"%"
         limit  #{startIndex},#{pageSize}
    </select>
    <!-- 模糊查詢查詢總條數-->
    <select id="selectCount2" resultType="java.lang.Integer" parameterType="java.lang.String">
        select count(*) from sys_user where
        username like "%"#{keywords}"%"
    </select>

6. 前端實現為:通過引數數值控制分頁首頁和頁面資料多少

這樣一來,四種分頁查詢方式就介紹完了,基礎的資料庫配置、spring boot配置等見上一篇博文,上一篇都有詳細的介紹。

至此,結束。