美文网首页
mybatis-plus使用IPage 分页查询总是返回全部数据

mybatis-plus使用IPage 分页查询总是返回全部数据

作者: 进击的奥莉 | 来源:发表于2020-07-02 11:26 被阅读0次

    初学SpringBoot,在使用myBatis-plus时候做的第一件事就是做一个分页查询,使用selectMapsPage,奈何返回了全部数据,网上也比较少的解决方案,今天刚好遇到,和大家分享一下。
    我的项目目录结构如下


    mybatis分页查询3.png

    1,pom.xml配置新增依赖,从mybatis-plus官网获取

    <dependency>
      <groupId>com.baomidou</groupId>
      <artifactId>mybatis-plus-boot-starter</artifactId>
      <version>3.1.0</version>
    </dependency>
    

    2,接下来要连接数据库并在IDEA控制台打印sql

    spring:
      datasource:
        driver-class-name: com.mysql.jdbc.Driver
        url: jdbc:mysql://localhost:3306/book_system?useUnicode=true&useSSL=false&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
        username: root
        password: 123456
    #打印sql语句
    mybatis-plus:
      configuration:
        log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
      type-aliases-package: com.zyh.springboot.entity
      mapper-locations: classpath:/mapper/*Mapper.xml
    

    3,在mapper/BookMapper文件下创建接口.因为我完全使用的mybatis-plus的查询函数,所以这里什么都不用写。如果要自定义查询,这里可以写。

    @Repository
    @Mapper
    public interface BookMapper extends BaseMapper<Book> {}
    

    4,接下来就是service和impl实现层了。
    service/BookService.java
    我这里使用了返回类型是Ipage。其中status,is_deleted是where查询条件,page_num,page_size是分页参数

    public interface BookService extends IService<Book> {
        IPage<Map<String,Object>> getBookList(Integer status,Integer is_deleted,Integer page_num, Integer page_size);
    }
    

    service/impl/BookServiceImpl.java。这里是实现层,也是比较重要的地方(当然,每个地方都很重要,这里是业务逻辑比较多的地方。)

    @Service("UserService")    //标明是Service
    public class BookServiceImpl extends ServiceImpl<BookMapper, Book> implements BookService {
        @Autowired
        private BookMapper bookMapper;
    
        @Override
        public IPage<Map<String,Object>> getBookList(Integer status, Integer is_deleted, Integer page_num, Integer page_size) {
            QueryWrapper<Book> queryWrapper = new QueryWrapper<>();
            queryWrapper.eq("status",status);
            queryWrapper.eq("is_deleted",is_deleted);
    
            long count = bookMapper.selectCount(queryWrapper);
    
            IPage<Book> page = new Page<>(page_num,page_size,count);
            IPage<Map<String,Object>> list = (IPage<Map<String, Object>>) bookMapper.selectMapsPage(page,queryWrapper);
            return list;
        }
    }
    

    5,最后就是controller了,controller/BookController.java

    @RestController  //相当于@Controller+@ResponseBody注解
    @RequestMapping("/Book")  //访问路径
    public class BookController {
        @Autowired
        BookService bookService;    //引入service
    
        @ResponseBody
        @RequestMapping("/list")
        public IPage<Map<String,Object>> getList(Book book, Integer page_num, Integer page_size){
            if (page_num == null) page_num = 1;  //给出默认值
            if (page_size == null) page_size = 10; //给出默认值
            Integer status = book.getStatus();
            Integer is_deleted = book.getIs_deleted();
    
            IPage<Map<String,Object>> getBookList = bookService.getBookList(status,is_deleted,page_num,page_size);
            return getBookList;
        }
    }
    

    6,这时候你会兴致勃勃的去postman中输入访问地址,Enter一敲,发现返回的是全部记录,根本就没分页,但是分页信息还是准确的,比如下图,但是size不起作用


    分页查询1.png

    这时候只需要在你的项目下,新建config/mybatisPlusConfig.java文件,并添加代码

    @Configuration
    public class mybatisPlusConfig {
        @Bean
        public PaginationInterceptor paginationInterceptor(){
            return new PaginationInterceptor();
        }
    }
    

    重新运行,就实现分页效果了。
    如果你还有其他方面的问题,请留言。

    相关文章

      网友评论

          本文标题:mybatis-plus使用IPage 分页查询总是返回全部数据

          本文链接:https://www.haomeiwen.com/subject/kiplqktx.html