初学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();
}
}
重新运行,就实现分页效果了。
如果你还有其他方面的问题,请留言。
网友评论