Mybatis分页插件的使用问题记录

项目中配置的分页插件依赖为

复制代码
<dependency>
		    <groupId>com.github.pagehelper</groupId>
		    <artifactId>pagehelper</artifactId>
		    <version>5.1.7</version>
		</dependency>

之前的项目代码编写分页的方式为,通过传入的条件,先查询总条数,这是第一次sql执行,然后,根据传入的页码、条数,拼凑limit条件,查询分页记录,这是第二次sql执行,如下

复制代码
int start = (Integer.valueOf(pageNum)-1)*Integer.valueOf(pageSize);
            int end = Integer.valueOf(pageSize);
            String dataType = "dataType";
            List<DataTypeList>list = dataTypeMapper.queryDataTypeList(request.getParameter(dataType),start,end);
            for (DataTypeList dataTypeList : list) {
                Date date = new Date(dataTypeList.getCheckTime());
                dataTypeList.setCheckDate(sdf.format(date));
            }
            page.setList(list);
            page.setPageSize(pageSize);
            int total = dataTypeMapper.countByExample(request.getParameter(dataType));
            page.setTotal(String.valueOf(total));
            page.setPageNum(pageNum);
            page.setPages(String.valueOf((total%Integer.valueOf(pageSize))>0?(total/Integer.valueOf(pageSize)+1):(total/Integer.valueOf(pageSize))));

可是这样的写法,有没有分页插件压根没影响啊,而且特别蠢,于是考虑改造,通过如下代码实现分页

复制代码
PageHelper.startPage(Integer.valueOf(pageNum),Integer.valueOf(pageSize));
        List<DataTypeList>list = dataTypeMapper.queryDataTypeList1(request.getParameter("templateId"));
        PageInfo<DataTypeList> pageInfo = new PageInfo<DataTypeList>(list);

运行之后有了总条数等信息,但是分页却不生效,查询的是所有记录,于是,考虑增加配置,如下

复制代码
pagehelper.helperDialect=mysq1
pagehelper.reasonable=true
pagehelper.supportMethodsArguments=true
pagehelper.params=count=countSq1

如果自定义了数据库连接配置,那么需要用下面的方式,将分页插件定义到mybatis配置中,如下

复制代码
@Bean
    public SqlSessionFactory mnrSqlSessionFactory(DataSource mnrDataSource)
            throws Exception {
        final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
        sessionFactory.setDataSource(mnrDataSource);
        sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
                .getResources(MnrDataSourceConfig.MAPPER_LOCATION));
		org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration();
		configuration.setMapUnderscoreToCamelCase(true);
		sessionFactory.setConfiguration(configuration);
		PageInterceptor pageHelper = new PageInterceptor();
		Properties properties = new Properties();
		properties.setProperty("reasonable","true");
		pageHelper.setProperties(properties);
		sessionFactory.setPlugins(new Interceptor[]{pageHelper});
        return sessionFactory.getObject();
    }

我这里加了驼峰自动转换,当然,也可以在xml文件配置,如下

复制代码
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <!-- 其他配置 -->
    <property name="plugins">
        <array>
            <bean class="com.github.pagehelper.PageInterceptor">
                <property name="properties">
                    <!-- 这里可以配置PageHelper的属性 -->
                    <props>
                        <prop key="reasonable">true</prop>
                        <prop key="supportMethodsArguments">true</prop>
                        <prop key="returnPageInfo">check</prop>
                    </props>
                </property>
            </bean>
        </array>
    </property>
</bean>

另外,如果更改依赖为pageHelper-spring-boot-starter的话

复制代码
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
    <version>1.4.0</version>
</dependency>

直接编写分页代码即可,不需要额外配置

starter的autoConfiguratuin中自动配置了分页插件

相关推荐
Billow_lamb14 小时前
MyBatis Plus 中常用的插件列表
java·mybatis
silence25016 小时前
MyBatis-Plus 报错 Invalid bound statement(insert)?其实是 SqlSessionFactoryBean 踩坑了
mybatis·mybatis-plus
好学且牛逼的马1 天前
原生 JDBC + DbUtils + MyBatis 同场景 Demo(C3P0 数据源 XML 配置版)
xml·mybatis
代码栈上的思考1 天前
MyBatis XML的方式来实现
xml·java·mybatis
Jaising6661 天前
Mybatis Plus 主键生成器实现思路分析
数据库·spring boot·mybatis
Roye_ack1 天前
【微服务 Day1】SpringCloud实战开发(Mybatis-plus + Docker)
spring cloud·docker·微服务·mybatis
記億揺晃着的那天1 天前
MyBatis-Plus 单元测试中 Lambda Mock 的坑与解决
单元测试·log4j·mybatis
计算机学姐1 天前
基于SSM的社区外来务工人员管理系统【2026最新】
java·vue.js·java-ee·tomcat·maven·intellij-idea·mybatis
北极糊的狐2 天前
若依系统报错net::ERR_CONNECTION_TIMED_OUT的原因
java·windows·sql·mybatis