一、mybatis的分页
1、PageHelper的使用
(1)导入依赖
<!-- 分页查询依赖 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.12</version>
</dependency>
(2)mvc的service层
PageHelper.startPage(page, size);
List<Demo> demoByParams= demoMapper
.getDemoByParams(ids.toString(), name, desc, type);
PageInfo<Demo> pageInfo = new PageInfo<>(demoByParams);
result.setData(pageInfo.getList());
result.setTotal(pageInfo.getTotal());
(3)mvc的mapper层
和分页无关,原sql
import org.apache.ibatis.annotations.Param;
List<Demo> getDemoByParams(@Param("ids") String ids, @Param("name") String name,
@Param("desc") String desc, @Param("type") int type);
二、jpa分页
jpa有好几个继承关系的接口:JpaRepository继承PagingAndSortingRepository,PagingAndSortingRepository继承CrudRepository。

1、在JpaRepository中
1、org.springframework.data.domain.PageRequest;的使用
(1)mvc的Service层
//jpa自带查询方法分页使用:多传一个参数pageRequest
PageRequest pageRequest = PageRequest.of(page - 1, size);//特别注意:jpa当前页从0开始,但前端一般参数从1开始
Page<JctbctYjjbntPy> findAll = basicFarmlandPageRepository.findAll(pageRequest);
result.setData(findAll.getContent());//获取分页后的数据
result.setTotal(findAll.getTotalElements());//获取总数量
//自定义jpa的sql查询
PageRequest pageRequest = PageRequest.of(page - 1, size);
Page<JctbctYjjbntPy> byZjCodeList = basicFarmlandPageRepository.getByZjCodeList(code, pageRequest);
result.setData(byZjCodeList.getContent());
result.setTotal(byZjCodeList.getTotalElements());
(2)mvc的repository层
import org.springframework.data.repository.query.Param;
import org.springframework.data.domain.Page;
@Query("SELECT t FROM JctbctYjjbntPy t WHERE xzdm=?1")
Page<JctbctYjjbntPy> getByZjCodeList(@Param("code") String code, PageRequest pageRequest);
2、在PagingAndSortingRepository中
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
PageRequest pageRequest = PageRequest.of(page - 1, size);
/**
* Specification<Users>:用于封装查询条件
*/
Specification<ComponentModelEntity> spec = new Specification<ComponentModelEntity>() {
//Predicate:封装了 单个的查询条件
/**
* Root<Users> root:查询对象的属性的封装。
* CriteriaQuery<?> query:封装了我们要执行的查询中的各个部分的信息,select from order by
* CriteriaBuilder cb:查询条件的构造器。定义不同的查询条件
*/
@Override
public Predicate toPredicate(Root<ComponentModelEntity> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
List<Predicate> list = new ArrayList<>();
list.add(cb.equal(root.get("typeId"),"1"));//筛选
query.orderBy(cb.asc(root.get("id")));//排序
Predicate[] arr = new Predicate[list.size()];
return cb.and(list.toArray(arr));
}
};
Page<ComponentModelEntity> all = componentModelDao.findAll(spec,pageRequest);
多条件查询:
PageRequest pageRequest = PageRequest.of(page - 1, size);
Specification<ToolBoxTask> spec = new Specification<ToolBoxTask>() {
@Override
public Predicate toPredicate(Root<ToolBoxTask> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
List<Predicate> list = new ArrayList<Predicate>();
list.add(root.get("type").in("1", "10", "11"));
list.add(cb.equal(root.get("creatorId"), creatorId));
Predicate[] p = new Predicate[list.size()];
return cb.and(list.toArray(p));
}
};
Page<ToolBoxTask> all = toolBoxDao.findAll(spec, pageRequest);
3、区别
CrudRepository提供CRUD的功能
PagingAndSortingRepository提供分页和排序功能
JpaRepository提供JPA相关的方法,如刷新持久化数据、批量删除等。
三、mybatis-plus分页
第一步、新建配置类,如下:
import com.baomidou.mybatisplus.plugins.PaginationInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@EnableTransactionManagement(proxyTargetClass = true)
public class MybatisPlusConfig {
/**
* mybatis-plus分页插件<br>
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
return paginationInterceptor;
}
}
第二步,使用:
QueryWrapper<TaskManager> queryWrapper = new QueryWrapper<>();
IPage<TaskManager> page = new Page<>(1,10);
taskManagerMapper.selectMapsPage(page, queryWrapper);//查询返回的是map
//IPage<FieldInfo> fieldInfoIPage = fieldInfoMapper.selectPage(page, queryWrapper);//查询返回的是实体类
//page.getRecords()
//page.getTotal()
分页技术
本文介绍MyBatis、MyBatis-Plus及JPA三种框架下的分页实现方式,包括PageHelper、mybatis-plus插件和Spring Data JPA的PageRequest用法。
2729





