MyBatis分页查询的几种方法-重点分页插件的配置和使用

一、内存分页,使用RowBounds类,但这种方式不推荐,基本不用,所以此方式集成省略。

二、自定义实现,代码量比较少,简单,比较灵活。以下为具体的集成步骤:

1、在User.xml中加入select节点,并组装分页SQL

 <select id="getUserArticlesByLimit" parameterType="int" resultMap="resultUserArticleList">
        select user.id,user.userName,user.userAddress,article.id as aid,article.title,article.content from user,article where user.id=article.userid and user.id=#{arg0} limit #{arg1},#{arg2}
    </select>

注意:上面的写法中select节点的parameterType属性为int类型,而此时是由于当前业务的SQL语句就是全部都是int型的,当对于多类型时,这种属性就不能这么设置了。具体的在多参数中会进行讲解。

2、在IUserOperation.java中加入Mapping对应的方法

public List<Article> getUserArticlesByLimit(int id,int start,int limit);

3、修改UserController.java中获取数据的方法,改成分页方法,并传入指定参数


package com.jsoft.testmybatis.controller;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import com.jsoft.testmybatis.inter.IUserOperation;
import com.jsoft.testmybatis.models.Article;

@Controller
@RequestMapping("/article")
public class UserController {
    @Autowired
    IUserOperation userMapper;

    @RequestMapping("/list")
    public ModelAndView listall(HttpServletRequest request,HttpServletResponse response){
        List<Article> articles=userMapper.getUserArticlesByLimit(1,0,2); 
        ModelAndView mav=new ModelAndView("/article/list");
        mav.addObject("articles",articles);
        return mav;
    }
}

意思是获取用户1的数据,从第0行开始的2条数据。

三,通过分页插件实现

在pom中添加分页插件

<!-- 分页工具,可以达到切换数据库平台的目的 -->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>5.1.4</version>
        </dependency>

然后在MyBatis-configuration.xml中添加配置

<configuration>
    <!-- 配置分页插件 -->
    <plugins>
        <!-- <plugin interceptor="com.github.pagehelper.PageHelper"> -->
        <plugin interceptor="com.github.pagehelper.PageInterceptor">
            <!-- 设置数据库类型 Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六种数据库 -->
            <!-- <property name="dialect" value="mysql" /> -->
        </plugin>
    </plugins>
</configuration>

也是自己之前在网上找的,这是最后修改的,亲测可用。
之前看网上的都是这样的,没有被我修改过的

<configuration>
    <!-- 配置分页插件 -->
    <plugins>
        <plugin interceptor="com.github.pagehelper.PageHelper"> 
            <!-- 设置数据库类型 Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六种数据库 -->
            <property name="dialect" value="mysql" />
        </plugin>
    </plugins>
</configuration>

在这个过程中也遇到了让人很头疼的问题,查看异常信息最终在网上找到了答案
这里写图片描述

Cause: java.lang.ClassCastException: com.github.pagehelper.PageHelper cannot be cast to org.apache.ibatis.plugin.Interceptor
因为pageHelper根本就没有实现Interceptor接口,PageInterceptor才实现了Interceptor这个接口。需要将pageHelper替换为PageInterceptor。其实关于这个问题的解决我也是参考别人的,这个博主比我介绍的更为详细,使用MyBatis分页插件PageHelper遇到的问题 - 钟欣 - 博客园 https://www.cnblogs.com/zx947240023/p/8150923.html
其中跟我遇到的问题都是一模一样。
配置好了之后就可以进行使用了。
使用起来真的很简单,只要在查询之前使用PageHelper.startPage(startPage,pageSize);定义好查询的起始记录数和每页行数就好了。
这里写图片描述

使用分页插件真的太方便了,只要配置好了,对于每个 实体类在进行分页查询时就是通用的了,不用再一个一个的编写分页查询的sql语句了。
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值