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);

结语

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

相关推荐
齐 飞10 分钟前
MongoDB笔记01-概念与安装
前端·数据库·笔记·后端·mongodb
云空11 分钟前
《Python 与 SQLite:强大的数据库组合》
数据库·python·sqlite
暮毅15 分钟前
10.Node.js连接MongoDb
数据库·mongodb·node.js
wowocpp18 分钟前
ubuntu 22.04 server 格式化 磁盘 为 ext4 并 自动挂载 LTS
服务器·数据库·ubuntu
成富41 分钟前
文本转SQL(Text-to-SQL),场景介绍与 Spring AI 实现
数据库·人工智能·sql·spring·oracle
songqq2742 分钟前
SQL题:使用hive查询各类型专利top 10申请人,以及对应的专利申请数
数据库·sql
计算机学长felix1 小时前
基于SpringBoot的“校园交友网站”的设计与实现(源码+数据库+文档+PPT)
数据库·spring boot·毕业设计·交友
小码的头发丝、2 小时前
Django中ListView 和 DetailView类的区别
数据库·python·django
Karoku0662 小时前
【企业级分布式系统】Zabbix监控系统与部署安装
运维·服务器·数据库·redis·mysql·zabbix
周全全2 小时前
MySQL报错解决:The user specified as a definer (‘root‘@‘%‘) does not exist
android·数据库·mysql