欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

实现分页查询的思路与代码

程序员文章站 2022-06-17 09:35:57
...
  • 思维图
    实现分页查询的思路与代码
  • handler层(也就是control层)
    /**
     * 分页查询
     * @param keyword
     * @param pageNum
     * @param pageSize
     * @param modelMap
     * @return
     */
    @RequestMapping("/admin/get/page.html")
    public String getPageInfo(
            // 在请求中没有携带对应参数时,使用defaultValue提供默认值
            // keyword默认使用空字符串,和sql语句配合实现两种情况的适配
            @RequestParam(value = "keyword",defaultValue = "") String keyword,

            // PageNum默认值使用1,页面默认显示第一页
            @RequestParam(value = "pageNum",defaultValue = "1") Integer pageNum,

            // PageSize默认值使用5
            @RequestParam(value = "pageSize",defaultValue = "5") Integer pageSize,
            ModelMap modelMap
    ) {
        // 调用Service方法获取PageInfo对象
        PageInfo<Admin> pageInfo = adminService.getPageInfo(keyword, pageNum, pageSize);

        // 将PageInfo对象存入模型
        modelMap.addAttribute(CrowdConstant.ATTR_NAME_PAGE_INFO,pageInfo);

        return "admin-page";
    }
  • service层
    @Override
    public PageInfo<Admin> getPageInfo(String keyword, Integer pageNum, Integer pageSize) {

        // 1.调用PageHelper的静态方法开启分页功能
        PageHelper.startPage(pageNum,pageSize);

        // 2.执行查询
        List<Admin> list = adminMapper.selectAdminBuKeyword(keyword);

        // 3.封装到PageInfo对象中,并返回
        return new PageInfo<>(list);
    }
  • 分页插件的依赖
            <!-- mybatis分页插件 -->
            <dependency>
                <groupId>com.github.pagehelper</groupId>
                <artifactId>pagehelper</artifactId>
                <version>4.0.0</version>
            </dependency>
  • mapper层
    <select id="selectAdminBuKeyword" resultMap="BaseResultMap">
        select id, login_acct, user_pswd, user_name, email, create_time
        from tb_admin
        where
            login_acct like concat("%",#{keyword},"%") or
            user_name like concat("%",#{keyword},"%") or
            email like concat("%",#{keyword},"%")
    </select>
  • 前端JS
<!-- 分页插件要在jQuery的后面 -->
<link rel="stylesheet" href="css/pagination.css">
<script type="text/javascript" src="jquery/jquery.pagination.js"></script>

<script type="text/javascript">

    $(function () {
        // 调用后面声明的函数对页面导航条进行初始化操作
        initPagination();
    });

    // 生成页码导航条函数
    function initPagination() {

        // 获取总记录数
        var totalRecord = ${requestScope.pageInfo.total};

        // 声明一个JSON对象存储Pagination要设置的属性
        var properties = {
            num_edge_entries: 3,                                // 边缘页
            num_display_entries: 5,                             // 主体页数
            callback: pageSelectCallback,                     // 指定用户点击翻页时跳转页码的回调函数
            items_per_page: ${requestScope.pageInfo.pageSize},     // 每页显示多少条数据
            current_page: ${requestScope.pageInfo.pageNum - 1}, // 两者开始的下标不一致
            prev_text: "上一页",                                // 上一页按钮上显示的文本
            next_text: "下一页"                                 // 下一页按钮上显示的文本
        };

        // 生成页码导航条
        $("#Pagination").pagination(totalRecord,properties);
    }

    // 回调函数的含义:声明出来之后不是自己调用,而是交给系统或框架调用
    // 用户点击页码调用这个函数进行页码跳转
    // pageIndex是Pagination传给我们那个从0开始的页码,使用的时候要+1
    function pageSelectCallback(pageIndex,jQuery) {

        // 根据pageIndex计算得到pageNum
        var pageNum = pageIndex + 1;

        // 跳转页面
        window.location.href = "admin/get/page.html?pageNum="+pageNum+"&keyword=${param.keyword}";

        // 由于每一个页码按钮都是超链接,所以在这个函数最后取消超链接的默认行为
        return false;

    }

</script>

<tfoot>
  <tr>
    <td colspan="6" align="center">
      <div id="Pagination" class="pagination">
         <!-- 此处显示分页 -->
      </div>
    </td>
  </tr>
</tfoot>

  • 需要导入分页相关的css代码
@charset "utf-8";      
.pagination a {
    text-decoration: none;
	border: 1px solid #AAE;
	color: #15B;
}

.pagination a, .pagination span {
    display: inline-block;
    padding: 0.1em 0.4em;
    margin-right: 5px;
	margin-bottom: 5px;
}

.pagination .current {
    background: #26B;
    color: #fff;
	border: 1px solid #AAE;
}

.pagination .current.prev, .pagination .current.next{
	color:#999;
	border-color:#999;
	background:#fff;
}
  • 导入jquery.pagination.js包网上下载即可
    实现分页查询的思路与代码
    感谢封捷老师,目标思路代码
相关标签: ssm java