Mybatis 带条件的前后端分页查询(pageHelper + pagination)

目标

以分页的形式把管理员信息显示到页面上 特殊需求:后端兼顾带关键词查询或者不带关键词查询,为了方便代码不冗余,写一个接口,后端采用PageHelper插件,前端采用Pagation分页插件

思想

这里以Admin为例, 梳理大致流程

1.编写AdminController.getPage(pageNum,pageSize,keyWord,modelMap);
这里注意,如何灵活的携带关键词或者不携带关键词进行分页查询 ,需要给keyWord设置一个默认值,默认为空
2. 在Controller中调用

 PageInfo<Admin>  pagInfo = AdminService.gePage(pageNum,pageSize,keyWord);
  1. 将pageInfo存入ModelMap 模型
  2. 重定向到页面中。
  3. 在Service层 通过PageHelper.startPage(pageNum,pageSize);进行分页
  4. 通过调用AdminMapper.selectAdminByKeyWord(keyWord);
  5. 编写Sql语句,通过like模糊查询 将keyword通过sql函数 concat连接字符串 w
select * from admin where name like concat("%",#{keyWord},"%") 

8.返回pageInfo

代码实现

后端

AdminController

 /**
     * 带关键词或者不带关键词的分页查询
     * @param pageNum
     * @param pageSize
     * @param keyWord
     * @return 返回到admin-page页面
     */
    @RequestMapping("/admin/page.html")
    public String getAdminPage(@RequestParam(value = "pageNum",defaultValue = "1") Integer pageNum,
                               @RequestParam(value = "pageSize",defaultValue = "5") Integer pageSize,
                               //当keyWord为默认值空时,就代表不带条件的分页查询
                               @RequestParam(value = "keyWord",defaultValue = "") String keyWord,
                               ModelMap modelMap){

        // 带关键词的查询
        PageInfo<Admin> pageInfo = adminService.getAdminPage(pageNum,pageSize,keyWord);
        // 将查询到的结果存入模型
        modelMap.addAttribute(CrowdConstant.ATTR_NAME_PAGE_INFO,pageInfo);
        return "admin-page";
    }

AdminService

 /**
     * 带条件或者不带条件的分页查询
     * @param pageNum
     * @param pageSize
     * @param keyWord
     * @return
     */
    @Override
    public PageInfo<Admin> getAdminPage(Integer pageNum, Integer pageSize, String keyWord) {

        // 分页,调用pageHelper插件的startPage()静态方法
        PageHelper.startPage(pageNum,pageSize);
        // 调用AdminMapper进行条件查询
        List<Admin> adminList = adminMapper.selectAdminListByKeyword(keyWord);
        // 返回pageInfo对象
        return new PageInfo<>(adminList);
    }

以上就是后端的代码

前端采用第三方插件 Pagination

首先 需要下载Pagination并且在项目中引入,该插件是依赖于jQuery的,所以需要先引入jQuery

  1. 在需要的页面引入相关css和jquery

2.编写Pagination js代码

<script>
	$(function){
		initPagation();
}

// 初始化分页
function initPagation(){
   //  获取总页数
   var totalRecord = ${requestScope.pageInfo.total};
   // 调用分页导航条对应的jQuery对象的pagination()方法进行分页
   // totalRecord 总页数   jsonObject json对象
   $("#pagination").pagination(totalRecord,jsonObject)
}

// json对象
var jsonObject = {
   	   items_per_page:${requestScope.pageinfo.pageSize},   //每页显示的记录数
       //Pagation插件的当前页 是page_index, 是从0开始的, PageInfo对象的当前页是从1开始的,
       current_page:${requestScope.pageinfo.pageNum-1},    // 当前页码, PageInfo对象是从1开始的,Pagation插件是从0开始的
       num_edge_entries: 3,                                // 边缘页数    123  ... 455678... 91011
       prev_text: "上一页",                                   // 上一页按钮显示的文本
       next_text: "下一页",                                   // 下一页按钮显示的文本
       callback: pageSelectCallback,                       // 回调函数,当用户进行"翻页",系统给出的响应
       num_display_entries: 5                            // 主体页数
}

/**
    * 当用户点击"上一页、下一页、1、2、3"时的功能
    * @param pageIndex
    * @param jQuery
    */
function pageSelectCallback(pageIndex,jQuery){
   // 定义pageNum  PageInfo中的pageNum是从第一页开始的,Pagation的第一页是从0开始的,所以 pageNum = pageINdex + 1;
   var pageNum = pageIndex + 1;
   // 跳转页面
   window.location.href = " 和后端接口对应?pageNum=“ + pageNum +"&keyWord=${param.keyWord}" ;
   // 取消当前超链接的默认行为
   return false;
}
</scipt>

至此,前后端的带条件的分页功能完成。 !

MyBatisPageHelper是一个常用的分页插件,它能简化JSP页面上处理分页的工作。以下是结合JSP使用PageHelper的基本步骤: 1. **添加依赖**:首先,在你的项目中需要引入PageHelper的jar包。如果你使用的是Maven,可以在pom.xml文件中加入依赖: ```xml <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.x.x</version> <!-- 更新到最新版本 --> </dependency> ``` 2. **配置PageHelper**:在Spring配置文件(如applicationContext.xml或application.properties)中配置PageHelper的相关属性,例如默认的分页大小、获取当前页码的SQL标签等。 3. **编写Mapper接口**:在Mapper接口中,声明一个泛型方法,比如`List<T> selectList(Page page);`。这里的`Page`是PageHelper提供的分页对象。 4. **在服务层调用Mapper**:在业务逻辑层,创建Page对象并设置起始位置和最大显示条数,然后通过Mapper接口的方法执行SQL查询,并传递Page对象。 5. **返回结果到JSP**:在Service层处理完查询结果后,将Page对象封装成一个模型(Model),传递给JSP。在JSP页面上,你可以直接使用PageHelper提供的API来遍历分页数据,展示每一页的数据。 6. **在JSP页面中使用**:使用JSTL标签库的c:forEach循环遍历`list`属性,同时利用PageHelper提供的`#{start}`, `#{limit}`, `#{total}`等变量访问分页信息,例如跳转链接。 ```jsp <c:forEach items="${model.list}" var="item"> <!-- 显示数据 --> <tr> <td>${item.column1}</td> <!-- 其他列 --> </tr> </c:forEach> <!-- 分页导航 --> <ul class="pagination"> <li><a href="<c:url value='your-action' params='pageNo=${model.current}'>'上一页'</a></li> <li><a href="#">第${model.current}页</a></li> <li><a href="<c:url value='your-action' params='pageNo=${model.next}'>'下一页'</a></li> </ul> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值