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

结语

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

相关推荐
JIngJaneIL2 小时前
社区互助|社区交易|基于springboot+vue的社区互助交易系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·社区互助
晚风吹人醒.2 小时前
缓存中间件Redis安装及功能演示、企业案例
linux·数据库·redis·ubuntu·缓存·中间件
Y***98512 小时前
DVWA靶场通关——SQL Injection篇
数据库·sql
Yawesh_best2 小时前
告别系统壁垒!WSL+cpolar 让跨平台开发效率翻倍
运维·服务器·数据库·笔记·web安全
蒋士峰DBA修行之路2 小时前
实验二十八 SQL PATCH调优
数据库·sql·gaussdb
I***t7163 小时前
一条sql 在MySQL中是如何执行的
数据库·sql·mysql
一 乐3 小时前
应急知识学习|基于springboot+vue的应急知识学习系统(源码+数据库+文档)
数据库·vue.js·spring boot
微学AI4 小时前
内网穿透的应用-突破局域网束缚,MongoDB 远程访问使用cpolar原来可以这么简单
数据库·mongodb
大锦终6 小时前
【MySQL】内置函数
数据库·mysql
猿小喵6 小时前
索引优化-MySQL性能优化
数据库·mysql·性能优化