MyBatis数据分页的实现

本文介绍如何使用PageHelper插件实现MyBatis的数据分页功能。首先需在pom.xml中添加依赖,并在mybatis配置文件中启用PageInterceptor。接着展示了具体的SQL映射配置及分页查询的实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

利用pagehelper实现MyBatis数据的分页功能。


在pom.xml中添加依赖:

<dependency>
  <groupId>com.github.pagehelper</groupId>
  <artifactId>pagehelper</artifactId>
  <version>${pagehelper.version}</version>
</dependency>


mybatis配置文件添加:

<plugins>
   <plugin interceptor="com.github.pagehelper.PageInterceptor">
      <property name="param1" value="value1"/>
   </plugin>
</plugins>
mapping中的sql

<!-- 日志信息的查询 -->
<select id="selectSelective" parameterType="java.util.Map" resultMap="BaseResultMap">
   select
    <include refid="Base_Column_List" />
    from sys_log
    <where>
      <if test="type !=null and type != 0 ">
           type = #{type, jdbcType=TINYINT}
   </if> 
   <if test="status != null and status != 0">
       AND state =  #{state, jdbcType=TINYINT}
   </if>
   <if test="host != null">
       AND host = #{host, jdbcType=CHAR}
   </if>
   <if test="username != null ">
       AND username = #{username, jdbcType=CHAR}
   </if>
    </where>
    ORDER BY id desc
</select>


数据分页的实现

@RequestMapping(value="/log", method = RequestMethod.GET, headers = "X-Requested-With=XMLHttpRequest")
@ApiOperation(value = "日志信息查询", response = ModelAndView.class, 
      notes = "日志查询 操作类型 0 全部、 1 登入、 2 登出",produces = org.springframework.http.MediaType.APPLICATION_JSON_VALUE)
@ApiImplicitParams({
   @ApiImplicitParam(name = "username", value = "帐号", required = false, dataType = "String", paramType = "query"),
   @ApiImplicitParam(name = "type", value = "操作类型", required = false, dataType = "String",defaultValue="0", paramType = "query"),
   @ApiImplicitParam(name = "host", value = "主机地址", required = false, dataType = "String", paramType = "query"),
   @ApiImplicitParam(name = "pageNum", value = "页码", required = true, dataType = "String",defaultValue="0", paramType = "query"),
   @ApiImplicitParam(name = "pageSize", value = "每页显示两", required = true, dataType = "String",defaultValue="5", paramType = "query")
})
public ModelAndView getLog(HttpServletRequest request){
   Map<String,Object> paramMap = new HashMap();
   paramMap.put("type", Util.getIntParameter(request, "type", false, "SysLog.type", 0));
   paramMap.put("usermane", Util.getTrimParameter(request, "usermane"));
   PageData pageData = new PageData();
   pageData = Util.getPage(request, pageData);
   Page page = PageHelper.startPage(pageData.getPage(),pageData.getLimit(),true);
   List<?> list = logService.selectSelective(paramMap);
   pageData.setTotal(page.getTotal());
   pageData.setItems(list);
   return getResultPageView(pageData);
}



### MyBatis Plus 分页实现原理 MyBatis Plus 的分页功能主要依赖于内置的分页插件来完成。当应用程序请求带有分页参数的数据时,该插件会拦截 SQL 执行,在原有查询语句基础上动态添加 LIMIT 和 OFFSET 子句以达到分页的效果[^1]。 #### 动态SQL构建过程 为了支持不同数据库系统的语法差异,MyBatis Plus 提供了一套抽象层用于适配多种主流关系型数据库(如 MySQL、Oracle 等)。这意味着即使底层使用的数据库有所不同,开发者也无需担心因方言变化而导致代码修改的问题。具体来说: - 对于每种类型的数据库,都有相应的 Dialect 类负责解析并调整最终发送给数据库执行的实际 SQL 文本; - 当开启分页模式后,每次发起查询操作前都会先由这些 Dialect 实例检查是否需要应用分页逻辑,并据此改造原始 SELECT 语句结构; ```java // 插入Dialect实例到全局配置中 mybatis-plus.global-config.dialect=MySQL ``` #### 自动化与灵活性兼顾的设计理念 除了提供便捷的一站式解决方案外,MyBatis Plus 还允许用户根据需求定制更复杂的分页行为。例如可以通过 XML 文件手动编写特定条件下的分页规则,或是利用 Java API 编程方式灵活控制排序字段及方向等细节设置[^2]。 ```java public <PO> Page<PO> toMpPage() { Page<PO> page = Page.of(pageNum, pageSize); if (orderItems != null && !orderItems.isEmpty()) { page.addOrder(orderItems); } else { // 默认按照创建时间降序排列 page.addOrder(OrderItem.desc("create_time")); } return page; } ``` 上述代码片段展示了如何将业务实体映射成适合传递给 MyBatis Plus 处理的标准 `Page` 对象形式,同时考虑到了未指定排序项情况下的默认处理策略[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值