MyBatis-Plus 使用分页查询, Total 和 Pages 都是0 ——Mybatis-Plus 常见问题(二)

2.MyBatis-Plus 使用分页查询, Total 和 Pages 都是0

可能的原因:
原因1:声明Page对象时将 isSearchCount 参数设为了false

如下:

Page<ExampleUser> page = new Page<>(1, 3, false);
解决方法:将 isSearchCount 参数设为了true 表示查询总量

**注意:**此操作会导致每次查询两条sql语句

Page<ExampleUser> page = new Page<>(1, 3, true);

原因2:将默认的 SqlSessionFactory 调整为了 Mybatis-Plus 的MybatisSqlSessionFactoryBean 并且没有将 分页插件 MybatisPlusInterceptor配置到 Mybatis-Plus 的MybatisSqlSessionFactoryBean
解决方法:将分页插件 MybatisPlusInterceptor 配置到 Mybatis-Plus 的MybatisSqlSessionFactoryBean
@Configuration
public class MyBatisPlusConfig {

	@Autowired
	@Qualifier(value = "dataSource")
	DataSource dataSource;

	@Autowired
	MybatisPlusInterceptor paginationInnerInterceptor;
	
	// 调整 SqlSessionFactory 为 Mybatis-Plus 的 MybatisSqlSessionFactoryBean 
	@Bean("sqlSessionFactory")
	MybatisSqlSessionFactoryBean bean() {
		MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();
		bean.setDataSource(dataSource);
		// 设置映射文件路径
		bean.setMapperLocations(new ClassPathResource("mapper/sys/ExampleUserMapper.xml"));
		// 设置分页插件
		bean.setPlugins(paginationInnerInterceptor);
		return bean;
	}

	/**
	 * myBatisPlus 分页插件
	 */
	@Bean
	public MybatisPlusInterceptor mybatisPlusInterceptor() {
		MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
		mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
		return mybatisPlusInterceptor;
	}
}
  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MyBatis-Plus 提供了分页功能,可以通过 Page 对象进行分页查询。 下面是一个简单的示例: 1. 在 Mapper 接口中定义分页查询方法: ```java @Mapper public interface UserMapper extends BaseMapper<User> { IPage<User> selectPageVo(Page page, @Param("state") Integer state); } ``` 2. 在 Service 层调用分页查询方法: ```java @Service public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService { @Autowired private UserMapper userMapper; public IPage<User> selectUserPage(Page page, Integer state) { return userMapper.selectPageVo(page, state); } } ``` 3. 在 Controller 层调用 Service 层的方法: ```java @RestController public class UserController { @Autowired private UserService userService; @GetMapping("/user") public IPage<User> getUserPage(Page page, Integer state) { return userService.selectUserPage(page, state); } } ``` 在这个示例中,我们使用MyBatis-Plus 提供的 Page 对象进行分页查询,通过 `selectPageVo` 方法实现了分页查询功能。 ### 回答2: 使用MyBatis-Plus进行分页需要以下步骤: 1. 首先,确保已经正确集成了MyBatis-Plus依赖,并配置了相关的数据库连接信息。 2. 在Mapper接口中定义查询方法,该方法的参数包括分页对象(com.baomidou.mybatisplus.extension.plugins.pagination.Page)和查询条件。 3. 使用MyBatis-Plus提供的PageHelper类创建分页对象,并设置分页参数,如当前页码和每页显示数量。 4. 调用Mapper接口中的查询方法,将分页对象和查询条件作为参数传入。 5. 在查询方法中,使用MyBatis-Plus提供的Page对象进行分页查询使用Page对象的selectPage方法,并将Page对象和查询条件作为参数传入。 6. 查询结果将会封装在Page对象中,通过Page对象的getRecords方法可以获取查询结果集。 7. 最后,可以通过Page对象的getTotal方法获取总记录数,从而得到总页数和当前页的记录数。 下面是一个示例: ```java // Mapper接口方法定义 List<User> getUserList(Page<User> page, @Param("name") String name); // 分页查询示例 Page<User> page = new Page<>(1, 10); // 创建分页对象,当前页码为1,每页显示10条记录 List<User> userList = userMapper.getUserList(page, "张三"); // 调用查询方法,传入分页对象和查询条件 List<User> records = page.getRecords(); // 获取查询结果集 long total = page.getTotal(); // 获取总记录数 long pages = page.getPages(); // 获取总页数 long current = page.getCurrent(); // 获取当前页码 long size = page.getSize(); // 获取每页显示数量 ``` 这样就可以使用MyBatis-Plus进行分页查询了。 ### 回答3: 使用Mybatis-Plus进行分页,首先需要在代码中引入Mybatis-Plus的依赖。 分页查询可以通过Page类来实现,具体步骤如下: 1. 创建一个Page对象: ```java Page<T> page = new Page<T>(current, size); ``` 其中,current代表当前页码,size代表每页记录数。 2. 调用Mybatis-Plus提供的分页查询方法,将Page对象作为参数传入: ```java IPage<T> result = myMapper.selectPage(page, queryWrapper); ``` 其中,myMapper是你自己创建的Mapper接口对象,queryWrapper是条件构造器,用于指定查询条件。 3. 从IPage对象中获取分页查询结果: ```java List<T> records = result.getRecords(); // 当前页的数据列表 long total = result.getTotal(); // 总记录数 long pages = result.getPages(); // 总页数 ``` 通过这种方式,我们可以方便地实现分页查询操作。同时,Mybatis-Plus还提供了一些其他的分页查询方法,如selectMapsPage()方法用于返回Map类型的分页查询结果,selectPage()方法的重载版本等,可以根据具体需求进行选择。 需要注意的是,使用Mybatis-Plus进行分页查询时,需要在实体类中声明分页相关的属性,以及对应的getter和setter方法。这些属性包括current(当前页)、size(每页记录数)、total(总记录数)、pages(总页数)等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值