Java SpringBoot Mybatis

1、引入依赖

只引入PageHelper不会自动适配SpringBoot失效,还需要整合依赖pagehelper-spring-boot-autoconfigure

  1. <!--pagehelper分页插件 -->
  2. <dependency>
  3. <groupId>com.github.pagehelper</groupId>
  4. <artifactId>pagehelper-spring-boot-starter</artifactId>
  5. <version>1.3.0</version>
  6. </dependency>
  7. <!-- Mybatis-plus -->
  8. <dependency>
  9. <groupId>com.baomidou</groupId>
  10. <artifactId>mybatis-plus-boot-starter</artifactId>
  11. <version>3.2.0</version>
  12. </dependency>

2、配置文件配置相应的参数

application.yml

  1. pagehelper:
  2. auto-dialect: on
  3. reasonable: true
  4. support-methods-arguments: true
  5. page-size-zero: true
  6. params: count=countSql

application.properties

  1. #分页插件会自动检测当前的数据库链接,自动选择合适的分页方式。 你可以配置helperDialect 属性来指定分页插件是否开启断言。
  2. pagehelper.helper-dialect=on
  3. #分页合理化参数,默认值为 false 。当该参数设置为 true 时, pageNum<=0 时会查询第一页, pageNum>pages (超过总数时),会查询最后一页。
  4. pagehelper.reasonable=true
  5. #支持通过Mapper接口参数传递page参数,默认值为falset
  6. pagehelper.support-methods-arguments=true
  7. #默认值为 false ,当该参数设置为 true 时,如果 pageSize=0 或者 RowBounds.limit =0 就会查询出全部的结果(相当于没有执行分页查询,但是返回结果仍然是 Page 类型)。
  8. pagehelper.pageSizeZero=true
  9. #为了支持 startPage(Object params) 方法,增加了该参数来配置参数映射,用于从对象中根据属性名取值
  10. pagehelper.params=count=countSql

3、使用

  1. package com.fcant.competition.service.impl;
  2. import com.fcant.competition.bean.CompetitionType;
  3. import com.fcant.competition.mapper.CompetitionTypeMapper;
  4. import com.fcant.competition.service.ICompetitionTypeService;
  5. import com.fcant.competition.utils.MsgUtil;
  6. import com.github.pagehelper.PageHelper;
  7. import com.github.pagehelper.PageInfo;
  8. import org.springframework.beans.factory.annotation.Autowired;
  9. import org.springframework.stereotype.Service;
  10. import java.util.List;
  11. /**
  12. * CompetitionTypeServiceImpl
  13. * <p>
  14. * encoding:UTF-8
  15. *
  16. * @author Fcant 下午 22:26:05 2020/4/17/0017
  17. */
  18. @Service
  19. public class CompetitionTypeServiceImpl implements ICompetitionTypeService {
  20. @Autowired
  21. CompetitionTypeMapper competitionTypeMapper;
  22. @Override
  23. public MsgUtil getAllCompetitionType(Integer page, Integer pageSize) {
  24. PageHelper.startPage(page, pageSize);
  25. List<CompetitionType> competitionTypes = competitionTypeMapper.selectAll();
  26. PageInfo<CompetitionType> pageInfo = new PageInfo<>(competitionTypes);
  27. return MsgUtil.success().addData("pageInfo", pageInfo);
  28. }
  29. }

4、使用提示

  • 只有紧跟在PageHelper.startPage()方法后的第一个Mybatis的查询(Select)方法会被分页。
  • 请不要在系统中配置多个分页插件(使用Spring时,mybatis-config.xml和Spring配置方式,请选择其中一种,不要同时配置多个分页插件)!
  • 对于带有for update的sql,会抛出运行时异常,对于这样的sql建议手动分页,毕竟这样的sql需要重视。
  • 由于嵌套结果方式会导致结果集被折叠,因此分页查询的结果在折叠后总数会减少,所以无法保证分页结果数量正确。