MybatisPlus将自定义的sql列表查询返回改为分页查询

问题描述

在开发过程中在 mapper.xml 文件中自定义了一个 sql 查询列表的 select 语句,但是由于前端需要的是分页数据,需要在后端将列表查询改成分页查询

修改前

1. 查询数据类型

java 复制代码
@Data
public class OppRelMoveWrapper implements BaseData {
    /**
     * ID
     */
    private Long id;

    /**
     * 商机ID
     */
    private Long oppId;

    /**
     * RELATIONSHIP
     */
    private String relationship;

    /**
     * 关系评价附件
     */
    private String attachmentRel;

    /**
     * CHIEF_RECORD
     */
    private String chiefRecord;

    /**
     * 首席代表动态记录附件
     */
    private String attachmentChief;

    /**
     * ORDINARY_RECORD
     */
    private String ordinaryRecord;

    /**
     * 普通动态记录附件
     */
    private String attachmentOrdinary;

    /**
     * 录入人
     */
    private Long createStaff;

    /**
     * 录入时间
     */
    private Date createDate;

    /**
     * 更新时间
     */
    private Date updateDate;
}

2. mapper定义

java 复制代码
@Mapper
public interface OppRelationshipInfoMoveMapper extends BaseMapper<OppRelationshipInfoMove> {
    
    List<OppRelMoveWrapper> queryMoveClientList(@Param("query") OppRelMoveQuery query);
}

3. xml文件定义

该语句查询的是一个返回数据类型为OppRelationshipInfoMoveMap的列表

xml 复制代码
  <resultMap type="com.wrapper.OppRelMoveWrapper"
               id="OppRelationshipInfoMoveMap">
        <result property="id" column="ID" jdbcType="INTEGER"/>
        <result property="oppId" column="OPP_ID" jdbcType="INTEGER"/>
        <result property="relationship" column="RELATIONSHIP" jdbcType="VARCHAR"/>
        <result property="attachmentRel" column="attachment_rel" jdbcType="VARCHAR"/>
        <result property="chiefRecord" column="CHIEF_RECORD" jdbcType="VARCHAR"/>
        <result property="attachmentChief" column="attachment_chief" jdbcType="VARCHAR"/>
        <result property="ordinaryRecord" column="ORDINARY_RECORD" jdbcType="VARCHAR"/>
        <result property="attachmentOrdinary" column="attachment_ordinary" jdbcType="VARCHAR"/>
        <result property="createStaff" column="CREATE_STAFF" jdbcType="INTEGER"/>
        <result property="createDate" column="CREATE_DATE" jdbcType="TIMESTAMP"/>
        <result property="updateDate" column="UPDATE_DATE" jdbcType="TIMESTAMP"/>
    </resultMap>

    <select id="queryMoveClientList" resultMap="OppRelationshipInfoMoveMap">
        SELECT
        ID,
        OPP_ID,
        RELATIONSHIP,
        attachment_rel,
        CHIEF_RECORD,
        attachment_chief,
        ORDINARY_RECORD,
        attachment_ordinary,
        CREATE_STAFF,
        CREATE_DATE,
        UPDATE_DATE
        FROM opp_relationship_info_move
        WHERE 1=1
        <if test="query.createDate != null and query.createDate != ''">
            AND DATE_FORMAT(CREATE_DATE, '%Y-%m-%d') = #{query.createDate}
        </if>
        <if test="query.updateDate != null and query.updateDate != ''">
            AND DATE_FORMAT(UPDATE_DATE, '%Y-%m-%d') = #{query.updateDate}
        </if>
        <if test="query.oppId != null and query.oppId != ''">
            AND OPP_ID = #{query.oppId}
        </if>
        ORDER BY CREATE_DATE DESC
    </select>

4. 函数使用

java 复制代码
List<OppRelMoveWrapper> moveWrapperList = oppRelationshipInfoMoveMapper.queryMoveClientList(query);

修改后

修改成分页查询比较简单,直接将 mapper 的查询方法修改即可

1. 修改mapper

将函数返回的数据改成 Page类型

java 复制代码
@Mapper
public interface OppRelationshipInfoMoveMapper extends BaseMapper<OppRelationshipInfoMove> {
    Page<OppRelMoveWrapper> queryMoveClientList(Page<Object> page, @Param("query") OppRelMoveQuery query);
}

2. 函数使用

注意: 构造Page时里面的 pageNum 和 pageSize 一定要存在!!! 否则获得的 Page 中的 records 为空!!!

java 复制代码
  Page<OppRelMoveWrapper> moveWrapperPage = oppRelationshipInfoMoveMapper.queryMoveClientList(
                new Page(query.getPage(), query.getPageSize(), true), query);

结语

很香的一个方法,使我的列表查询变成分页查询。

相关推荐
刘~浪地球9 分钟前
Redis 从入门到精通(五):哈希操作详解
数据库·redis·哈希算法
zzh08137 分钟前
MySQL高可用集群笔记
数据库·笔记·mysql
Shely20171 小时前
MySQL数据表管理
数据库·mysql
爬山算法1 小时前
MongoDB(80)如何在MongoDB中使用多文档事务?
数据库·python·mongodb
APguantou1 小时前
NCRE-三级数据库技术-第2章-需求分析
数据库·需求分析
寂夜了无痕2 小时前
MySQL 主从延迟全链路根因诊断与破局法则
数据库·mysql·mysql主从延迟
爱丽_2 小时前
分页为什么越翻越慢:offset 陷阱、seek 分页与索引排序优化
数据库·mysql
APguantou2 小时前
NCRE-三级数据库技术-第12章-备份与数据库恢复
数据库·sqlserver
Bat U2 小时前
MySQL数据库|表设计+新增+分组查询
数据库·mysql
麦聪聊数据2 小时前
企业数据流通与敏捷API交付实战(五):异构数据跨库联邦与零代码发布
数据库·sql·低代码·restful