当前位置: 首页 > article >正文

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中自动配置了分页插件


http://www.kler.cn/a/445489.html

相关文章:

  • outlook smtp 发送邮件
  • 揭秘区块链隐私黑科技:零知识证明如何改变未来
  • ABAP SQL 取日期+时间最新的一条数据
  • Python 爱心代码实现动态爱心图案展示
  • 02、服务器的分类和开发项目流程
  • Docker 镜像加速和配置的分享 云服务器搭建beef-xss
  • 后摩尔定律时代,什么将推动计算机性能优化的发展?
  • Halcon 机器视觉案例 之 药剂液面高度测量
  • flutter 快速实现侧边栏
  • 软件架构设计方法之The Clean Architecture 整洁架构
  • android opencv导入进行编译
  • 使LED每秒闪烁一次
  • 海外招聘丨埃因霍温科技大学—安全人工智能自动机器学习博士后
  • 系统设计:微服务架构的可扩展性系统 详解
  • 【mysql】1205 -Lock wait timeout exceeded; try restarting transaction
  • Hive其三,数据库操作,小技巧设置,加载数据等操作
  • 白嫖内网穿透之神卓互联Linux安装教程(树莓派)
  • 第一次面试到第一份offer的经历分享
  • 勤研低代码平台:重塑软件开发协作新生态
  • Mamba安装环境和使用,anaconda环境打包
  • SpringBoot 编程式事务使用
  • 2024最新CF罗技鼠标宏
  • 门店全域推广,线下商家营销布局的增量新高地
  • vue.js框架概述
  • 29. 多线程编程
  • 对象的状态变化处理与工厂模式实现