MyBatisPlus分页
在MyBatis-Plus中,自定义SQL分页可以通过使用Page类和自定义的Mapper方法实现。以下是一个简单的例子:
通过配置类来指定一个具体数据库的分页插件,因为不同的数据库的方言不同,具体生成的分页语句也会不同,这里我们指定数据库为Mysql数据库
@Configuration
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
}
首先,在Mapper接口中定义一个方法,该方法接收Page对象和其他查询参数:
public interface CustomMapper extends BaseMapper<Entity> {
IPage<Entity> selectCustomPage(Page<Entity> page, @Param("param") CustomQueryParam param);
}
然后,在Mapper XML中定义对应的SQL语句,并使用MyBatis-Plus提供的分页语法:
<select id="selectCustomPage" resultType="Entity">
SELECT * FROM some_table
WHERE some_condition = #{param.someField}
<!-- 使用MyBatis-Plus提供的分页语法 -->
<if test="page != null">
LIMIT #{page.offset}, #{page.size}
</if>
</select>
最后,在服务层调用这个方法:
@Service
public class CustomService {
@Resource
private CustomMapper customMapper;
public IPage<Entity> getCustomPage(Page<Entity> page, CustomQueryParam param) {
return customMapper.selectCustomPage(page, param);
}
}
最后进行测试
@Autowired
private CustomService customService;
@Test
public void testSelectPageVo(){
//设置分页参数
Page<Entity> page = new Page<>(current, size);
customService.getCustomPage(page, param);
//获取分页数据
List<Entity> list = page.getRecords();
list.forEach(System.out::println);
System.out.println("当前页:"+page.getCurrent());
System.out.println("每页显示的条数:"+page.getSize());
System.out.println("总记录数:"+page.getTotal());
System.out.println("总页数:"+page.getPages());
System.out.println("是否有上一页:"+page.hasPrevious());
System.out.println("是否有下一页:"+page.hasNext());
}
Written on May 13, 2024
