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>

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

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

### 分页查询的集成与使用 在实际开发中,为了提升查询效率和用户体验,通常会采用分页查询的方式处理大数据量。MyBatis-Plus 提供了内置的分页功能,而 PageHelper 是一个独立的分页插件,两者可以结合使用,以实现更灵活的分页需求。 #### 依赖引入 首先,需要在 `pom.xml` 文件中引入 MyBatis-Plus 和 PageHelper 的依赖。以下是一个典型的 Maven 项目配置: ```xml <dependencies> <!-- MyBatis-Plus 核心依赖 --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.1</version> </dependency> <!-- PageHelper 分页插件 --> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.4.2</version> </dependency> <!-- MySQL 数据库驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.28</version> </dependency> </dependencies> ``` #### 配置文件设置 在 `application.yml` 文件中配置 MyBatis-Plus 和 PageHelper 的相关参数: ```yaml server: port: 8080 spring: datasource: url: jdbc:mysql://127.0.0.1:3306/ssm?useUnicode=true&characterEncoding=UTF-8&useSSL=false username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver mybatis-plus: mapper-locations: classpath:/mapper/*Mapper.xml typeAliasesPackage: com.example.entity global-config: id-type: AUTO field-strategy: NOT_EMPTY db-column-underline: true refresh-mapper: true configuration: map-underscore-to-camel-case: true cache-enabled: true pagehelper: helperDialect: mysql reasonable: true supportMethodsArguments: true params: count=countSql ``` #### 分页查询实现 接下来,可以在服务层实现分页查询功能。通过构造 `Page` 对象并调用 PageHelper 的 `startPage` 方法,可以轻松实现分页查询。 ```java import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.example.entity.User; import com.example.mapper.UserMapper; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; @Service public class UserService { @Autowired private UserMapper userMapper; public PageInfo<User> getUsersWithPagination(int pageNum, int pageSize) { // 使用 PageHelper 进行分页 PageHelper.startPage(pageNum, pageSize); // 查询所有用户 List<User> users = userMapper.selectList(new QueryWrapper<User>().lambda()); // 使用 PageInfo 包装结果 return new PageInfo<>(users); } public Page<User> getMyBatisPlusUsersWithPagination(int pageNum, int pageSize) { // 构造 Page 对象 Page<User> page = new Page<>(pageNum, pageSize); // 使用 MyBatis-Plus 分页查询 return userMapper.selectPage(page, new QueryWrapper<User>().lambda()); } } ``` #### 控制器层 在控制器层,可以通过调用服务层的方法来获取分页数据,并返回给前端。 ```java import com.example.service.UserService; import com.github.pagehelper.PageInfo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @RestController public class UserController { @Autowired private UserService userService; @GetMapping("/users/pagehelper") public PageInfo<User> getUsersWithPageHelper(@RequestParam int pageNum, @RequestParam int pageSize) { return userService.getUsersWithPagination(pageNum, pageSize); } @GetMapping("/users/mybatisplus") public com.baomidou.mybatisplus.extension.plugins.pagination.Page<User> getUsersWithMyBatisPlus(@RequestParam int pageNum, @RequestParam int pageSize) { return userService.getMyBatisPlusUsersWithPagination(pageNum, pageSize); } } ``` #### 注意事项 - **分页插件冲突**:在某些情况下,MyBatis-Plus 和 PageHelper 可能会存在冲突,导致分页失效。为了避免这种情况,建议在使用 PageHelper 时,尽量避免与 MyBatis-Plus 的分页方法混用。 - **复杂 SQL 支持**:PageHelper 在处理复杂 SQL 时表现更好,而 MyBatis-Plus 的分页功能在某些嵌套查询场景下可能会失效。 - **多数据源支持**:PageHelper 天然支持多数据源,而 MyBatis-Plus 需要特殊配置才能支持多数据源。 通过上述步骤,可以顺利地在 Spring Boot 项目中集成 MyBatis-Plus 和 PageHelper,实现高效的分页查询功能。[^3]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值