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

2020-07-02  本文已影响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();
    }
}

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

上一篇下一篇

猜你喜欢

热点阅读