1 PageHelper
PageHelper是mybatis的通用分页插件,通过mybatis的拦截器实现分页功能,拦截sql查询请求,添加分页语句,最终实现分页查询功能。
项目使用Pagehelper实现Mybatis分页功能开发,由于本项目使用springboot开发,在springboot上集成pagehelper(https://github.com/pagehelper/pagehelper-spring-boot)
PageHelper的使用方法及原理如下:
在调用dao的service方法中设置分页参数:PageHelper.startPage(page, size),分页参数会设置在ThreadLocal中
PageHelper在mybatis执行sql前进行拦截,从ThreadLocal取出分页参数,修改当前执行的sql语句,添加分页sql。
最后执行添加了分页sql的sql语句,实现分页查询。
添加依赖
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.4</version>
</dependency>
配置pageHelper
在application.yml中配置pageHelper操作的数据库类型:
pagehelper:
helper-dialect: mysql
Controller
@RestController
@RequestMapping("/路径1")
public class CourseController implements CourseControllerApi {
@Autowired
CourseService courseService;
@Override
@GetMapping("/路径2/{page}/{size}")
public QueryResponseResult<CourseInfo> findCourseList(
@PathVariable("page") int page,
@PathVariable("size") int size,
CourseListRequest courseListRequest) {
return courseService.findCourseList(page,size,courseListRequest);
}
}
Service
定义CourseService.java类,用于课程管理的service定义:
@Service
public class PageService {
//课程列表分页查询
public QueryResponseResult<CourseInfo> findCourseList(int page,int size,CourseListRequest courseListRequest) {
if(courseListRequest == null){
courseListRequest = new CourseListRequest();
}
if(page<=0){
page = 0;
}
if(size<=0){
size = 20;
}
//设置分页参数
PageHelper.startPage(page, size);
//分页查询
Page<CourseInfo> courseListPage = courseMapper.findCourseListPage(courseListRequest);
//查询列表
List<CourseInfo> list = courseListPage.getResult();
//总记录数
long total = courseListPage.getTotal();
//查询结果集
QueryResult<CourseInfo> courseIncfoQueryResult = new QueryResult<CourseInfo>();
courseIncfoQueryResult.setList(list);
courseIncfoQueryResult.setTotal(total);
return new QueryResponseResult<CourseInfo>(CommonCode.SUCCESS, courseIncfoQueryResult);
}
}
Dao
mapper 接口
import com.github.pagehelper.Page;
import com.framework.domain.course.CourseBase;
import com.framework.domain.course.CourseInfo;
import com.framework.domain.course.request.CourseListRequest;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface CourseMapper {
Page<CourseInfo> findCourseListPage(CourseListRequest courseListRequest);
}
mapper.xml映射文件
<select id="findCourseListPage" resultType="com.framework.domain.course.ext.CourseInfo"
parameterType="com.framework.domain.course.request.CourseListRequest">
SELECT
course_base.*,
(SELECT pic FROM course_pic WHERE courseid = course_base.id) pic
FROM
course_base
</select>