记录一次Mybatis使用PageHelper分页但打印不出数据的情况

Posted 二木成林

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了记录一次Mybatis使用PageHelper分页但打印不出数据的情况相关的知识,希望对你有一定的参考价值。

这情况真的是怪得很。

Mybatis使用PageHelper的过程如下:

第一步,导入相关的maven坐标

    <!--mybatis-pagehelper分页-->
    <dependency>
      <groupId>com.github.pagehelper</groupId>
      <artifactId>pagehelper</artifactId>
      <version>5.0.0</version>
    </dependency>

第二步,在mybatis的核心配置文件sqlMapConfig.xml中添加插件配置

    <!--配置mybatis-pagehelper插件-->
    <plugins>
        <!-- com.github.pagehelper为PageHelper类所在包名 -->
        <plugin interceptor="com.github.pagehelper.PageInterceptor">
            <!-- 使用mysql方言的分页 -->
            <property name="helperDialect" value="mysql"/><!--如果使用mysql,这里value为mysql-->
            <property name="pageSizeZero" value="true"/>
        </plugin>
    </plugins>

第三步,进行测试

我们所查询的是查询数据库表中所有记录,所以查询语句如下:

未添加分页的代码如下:

public class Test {
    public static void main(String[] args) throws IOException {
        // 加载核心配置文件
        InputStream is = Resources.getResourceAsStream("SqlMapConfig.xml");
        // 获取SqlSessionFactory工厂对象
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
        // 生产sqlSession对象
        SqlSession sqlSession = sqlSessionFactory.openSession();
        // 执行查询
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        // 查询所有
        List<User> userList = mapper.findAll();
        System.out.println(userList);
        // 关闭资源
        sqlSession.close();
    }
}

添加分页就是添加"PageHelper.startPage(pageNum, pageSize);"代码,其中pageNum指的是当前页码,注意这个页码是从1开始的,pageSize指的是显示多少条记录。

public class Test {
    public static void main(String[] args) throws IOException {
        // 加载核心配置文件
        InputStream is = Resources.getResourceAsStream("SqlMapConfig.xml");
        // 获取SqlSessionFactory工厂对象
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
        // 生产sqlSession对象
        SqlSession sqlSession = sqlSessionFactory.openSession();
        // 执行查询
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        // 查询所有,进行分页,页码从1开始
        Page page = PageHelper.startPage(1, 2);
        List<User> userList = mapper.findAll();
        System.out.println(userList);
        // 关闭资源
        sqlSession.close();
    }
}

执行代码,看打印结果,会让人大吃一惊:

我们分页查询的数据不见了,或者说没有打印出来,而打印出来的是Page信息,但很明显是分页成功的了。

不信我们可以打印SQL语句来查看,使用日志打印SQL语句需要配置下:

第一步,导入如下的包:

    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>1.7.5</version>
    </dependency>
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.12</version>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-nop</artifactId>
      <version>1.7.2</version>
    </dependency>

第二步,在mybatis的核心配置文件sqlMapConfig.xml中添加如下内容就可以了

    <settings>
        <setting name="cacheEnabled" value="true" />
        <setting name="useGeneratedKeys" value="true" />
        <setting name="defaultExecutorType" value="REUSE" />
        <setting name="logImpl" value="STDOUT_LOGGING" />
    </settings>

所以为什么直接打印userList会是这种结果?

所以我们无法获取到结果吗,不是的,看下面的代码:

 

至于到底是什么原因,还没有探究过,在此记录下此次的情况。

以上是关于记录一次Mybatis使用PageHelper分页但打印不出数据的情况的主要内容,如果未能解决你的问题,请参考以下文章

使用Mybatis分页插件PageHelper时的分页问题

Mybatis 分页插件PageHelper 遇坑

Mybatis 分页插件PageHelper 遇坑

(转)mybatis数据库物理分页插件PageHelper

Mybatis分页插件pageHelper的使用步骤

Mybatis-PageHelper分页插件的使用与相关原理分析