在涉及到多表的时候就需要用到xml编写sql,这时候就需要额外的操作
1.使用Page插件
在service调用mapper传入Page
@Override
public Page<OATransferReviewResDTO> getAuditRecord(OATransferReviewReqDTO oaTransferReviewReqDTO) {
Page<OATransferReviewResDTO> oaTransferReviewDTOS = oaTransferRequestMapper
.selectByPage(
new Page<>(oaTransferReviewReqDTO.getCurrentPage(),oaTransferReviewReqDTO.getSize())
, oaTransferReviewReqDTO);
return oaTransferReviewDTOS;
}
new Page<>(oaTransferReviewReqDTO.getCurrentPage(),oaTransferReviewReqDTO.getSize())
mapper接收
Page<OATransferReviewResDTO> selectByPage(@Param("page") Page objectPage, @Param("OA") OATransferReviewReqDTO ontansferReviewReqDTO);
@Param("page")
xml也要注意
<select id="selectByPage" parameterType="com.baomidou.mybatisplus.extension.plugins.pagination.Page" resultType="com.hykj.pay.common.model.dto.oa.OATransferReviewResDTO">
SELECT
TYPE,TRANSFER_CHANNEL,ORG,AMOUNT,ACCOUNT,REVIEW_STATUS,REVIEWERS,REVIEW_REMARK,REFERENCE,CREATE_TIME,UPDATE_TIME
FROM
(
SELECT TYPE,TRANSFER_CHANNEL,ORG,AMOUNT,1 AS
ACCOUNT,REVIEW_STATUS,REVIEWERS,REVIEW_REMARK,REFERENCE,CREATE_TIME,UPDATE_TIME
FROM oa_transfer_request
<include refid="where1"/>
UNION ALL
SELECT TYPE,TRANSFER_CHANNEL,ORG,TOTAL_MONEY AS AMOUNT,COUNT AS
ACCOUNT,REVIEW_STATUS,REVIEWERS,REVIEW_REMARK,REFERENCE,CREATE_TIME ,UPDATE_TIME
FROM oa_transfer_import_record
<include refid="where2"/>
)
AS a
ORDER BY field(REVIEW_STATUS,'PENDING','APPROVAL','FAILURE') ,CREATE_TIME desc
</select>
parameterType="com.baomidou.mybatisplus.extension.plugins.pagination.Page"
2.使用RowBounds
在调用mapper时传入new RowBounds((page-1)*size,size)
mapper接收
Page<OATransferReviewResDTO> selectByPage(RowBounds rowBounds, @Param("OA") OATransferReviewReqDTO ontansferReviewReqDTO);
r
不需要额外的操作
3.PageHelper(需要引入依赖)
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.11</version>
</dependency>
// 开始分页,设置当前页码和每页的记录数
PageHelper.startPage(1, 10);
// 调用你的Mapper方法进行查询。这个方法将只返回第一页的数据
List<User> users = userMapper.selectByExample(example);
// 使用PageInfo包装查询结果,这样可以获取更多分页的相关信息,如总记录数、总页数等
PageInfo<User> pageInfo = new PageInfo<>(users);
4.区别
需要注意的是,性能差别很大,Page插件是将分页逻辑limit拼接到sql语句中,所以需要分页的sql结尾最好别加“ ;”
RowBounds是将合适的数据全查出来后,在内存中进行分页
使用PageHelper进行分页,首先需要在项目中引入PageHelper的依赖。然后,在执行查询之前,调用PageHelper.startPage(pageNum, pageSize)
方法,其中pageNum
表示页码,pageSize
表示每页的记录数。
当调用startPage
方法后,接下来的第一个Mybatis查询方法会被进行分页。具体来说,PageHelper会自动修改该查询的SQL语句,添加适当的LIMIT
和OFFSET
子句(或者其他数据库特定的分页语法),然后执行这个修改后的SQL语句。