MybatisPlus自定义sql多表关联分页条件查询

2023-11-01

@MybatisPlus自定义sql多表关联分页条件查询

mp封装了crud但是对应复杂sql还是需要自己定义

网上对于多表分页查询的mp描述不是很清楚,我在这里重新写一篇文章。

1.数据库准备

需要实现的sql是两表关联条件查询

select um.`nickname` ,aa.`comment_counts`,aa.`gmt_create`,
aa.`id`,aa.`summary`,aa.`title`,aa.`view_counts`,aa.`weight`
from atai_article aa join ucenter_member um 
on aa.`author_id`=um.`id` 
where aa.`title` like '%v%' limit 0 ,1;

查询效果
在这里插入图片描述
涉及数据库 atai_article和ucenter_member,ucenter_member不展示只需要关联查询nickname即可。
在这里插入图片描述

2.代码编写

2.1controller

关键代码

Page<ArticleFrontVo> pageArticle = new Page<>(current,limit);
IPage<ArticleFrontVo> result = ataiArticleService.findAllArticleCondition(pageArticle,articleQuery);
    @ApiOperation(value = "分页条件查询文章列表")
    @PostMapping("pageArticleCondition/{current}/{limit}")
    public R findAllArticleCondition(@PathVariable long current, @PathVariable long limit,
                                     @RequestBody(required = false)  ArticleQuery articleQuery) {
        Page<ArticleFrontVo> pageArticle = new Page<>(current,limit);
        IPage<ArticleFrontVo> result = ataiArticleService.findAllArticleCondition(pageArticle,articleQuery);
        List<ArticleFrontVo> list = result.getRecords();
        //调用service的方法实现查询所有的操作
        return R.success().data("total",result.getTotal()).data("records",list);
    }

2.2service

public interface AtaiArticleService extends IService<AtaiArticle> {
    IPage<ArticleFrontVo> findAllArticleCondition(Page<ArticleFrontVo> pageArticle, ArticleQuery wrapper);
}

2.3serviceimpl

@Service
public class AtaiArticleServiceImpl extends ServiceImpl<AtaiArticleMapper, AtaiArticle> implements AtaiArticleService {
    @Override
    public IPage<ArticleFrontVo> findAllArticleCondition(Page<ArticleFrontVo> pageArticle, ArticleQuery wrapper) {
        IPage<ArticleFrontVo>  articleFrontVos = baseMapper.findAllArticleCondition(pageArticle,wrapper);
        return articleFrontVos;
    }
}

2.4mapper

关键代码,起别名articleQuery在xml中取数据

@Param("articleQuery") ArticleQuery articleQuery
public interface AtaiArticleMapper extends BaseMapper<AtaiArticle> {
    IPage<ArticleFrontVo> findAllArticleCondition(@Param("page")Page<ArticleFrontVo> page, @Param("articleQuery") ArticleQuery articleQuery);

}

2.5xml

关键代码,使用articleQuery取数据

 <if test="articleQuery.title!=null and !(articleQuery.title).equals('')">
                and t1.title like "%"#{articleQuery.title,jdbcType=VARCHAR}"%"
 </if>
 <!--sql语句:条件查询所有文章-->
    <select id="findAllArticleCondition"  resultType="com.atai.eduservice.entity.frontvo.ArticleFrontVo">
        SELECT um.nickname ,t1.comment_counts,t1.gmt_create,t1.id,
        t1.summary,t1.title,t1.tag,t1.view_counts,t1.weight
        FROM atai_article t1, ucenter_member um
        <where>
            t1.author_id=um.id and t1.is_deleted=0
            <if test="articleQuery.title!=null and !(articleQuery.title).equals('')">
                and t1.title like "%"#{articleQuery.title,jdbcType=VARCHAR}"%"
            </if>
            <if test="articleQuery.begin!=null and !(articleQuery.begin).equals('')">
                and t1.gmt_create &gt; #{articleQuery.begin}
            </if>
            <if test="articleQuery.end!=null and !(articleQuery.end).equals('')">
                and t1.gmt_create &lt; #{articleQuery.end}
            </if>
        </where>
            order by t1.gmt_modified desc
    </select>

2.6涉及的entity

ArticleFrontVo


@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@ApiModel(value="ArticleFrontVo对象", description="文章")
public class ArticleFrontVo implements Serializable {

    private static final long serialVersionUID = 1L;

    @ApiModelProperty(value = "文章ID")
    @TableId(value = "id", type = IdType.ID_WORKER_STR)
    private String id;

    @ApiModelProperty(value = "摘要")
    private String summary;

    @ApiModelProperty(value = "标题")
    private String title;

    @ApiModelProperty(value = "评论数")
    private Integer commentCounts;

    @ApiModelProperty(value = "浏览数")
    private Integer viewCounts;

    @ApiModelProperty(value = "权重")
    private Integer weight;

    @ApiModelProperty(value = "作者名称")
    private String nickname;

    @ApiModelProperty(value = "标签列表")
    private String tag;

    @ApiModelProperty(value = "创建时间")
    private Date gmtCreate;

}

ArticleQuery

 @Data
public class ArticleQuery {
    @ApiModelProperty(value = "文章标题,模糊查询")
    private String title;

    @ApiModelProperty(value = "查询开始时间", example = "2019-01-01 10:10:10")
    private String begin;//注意,这里使用的是String类型,前端传过来的数据无需进行类型转换

    @ApiModelProperty(value = "查询结束时间", example = "2019-12-01 10:10:10")
    private String end;
}

3.进行接口测试

使用的是swagger进行接口测试
在这里插入图片描述
正确检索出数据

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MybatisPlus自定义sql多表关联分页条件查询 的相关文章

随机推荐

  • (机器学习实战)第四章

    都是在python3下面的 def loadDataSet postingList my dog has flea problems help please maybe not take him to dog park stupid my
  • linux常见文件夹名称及作用

    在Linux系统中 有许多常用的目录 每个目录都有其特定的作用和用途 以下是一些常见的Linux文件夹及其作用的示例 命令 公共 程序 bin 存放系统命令 二进制文件 如ls cp和mkdir等 这些命令可以在系统启动时使用 sbin 与
  • spark源码分析之shufflemanager

    1 shufflemanager的实现类 sortshufflemanager Spark 0 8及以前 Hash Based Shuffle 在Shuffle Write过程按照Hash的方式重组Partition的数据 不进行排序 每个
  • Java 使用esayExcel进行导出、导入包含多个sheet页面

  • Win10 CubeMX 安装java环境,安装不上去的问题解决

    问题描述 运行STM32CubeMX的时候 如果JAVA环境被破坏 会有如下问题 会自动弹出以下安装地址 Download Java for Windows 然后 在下载的文件 选择安装 点击安装后 就没有然后了 网上有建议 更改下面安装文
  • [ C语言 ]三子棋 代码实现

    引言 三子棋是一种简单而又有趣的棋类游戏 它可以帮助我们提高逻辑思维和决策能力 在本文中 我们将使用C语言来实现一个简单的三子棋游戏 并介绍一些基本的算法和技巧 一 游戏规则 1 游戏开始时 棋盘是空的 由两位玩家交替进行操作 2 玩家使用
  • 通过python写脚本简单爆破web页面登陆

    GET传参 import requests url payload username admin password admin submit 登陆 r requests get url params payload result r con
  • Jackson框架

    Jackson框架 一 Jackson简介 Jackson可以轻松的将Java对象转换成json对象和xml文档 同样也可以将json xml转换成Java对象 相比json lib框架 Jackson所依赖的jar包较少 简单易用并且性能
  • 金蝶EAS-BOS二开详细过程

    我们在做金蝶的项目时 经常会要求更改其项目本身的代码 但是它的代码都被封装在jar包中 我们应该怎么做呢 将要二开的单据实体或者facade 复制到我们的本地项目中 选中你要修改的具体实体或者facade 右键点击复制 重命名 复制到我们的
  • 配置Hadoop集群+WordCount案例

    配置Hadoop集群 配置环境变量 etc profile export HADOOP HOME bigData hadoop 2 8 0 export PATH P A T H PATH PATH HADOOP
  • cannot read property ‘line‘ of undefined

    环境 vite vue3 ts 这个问题的点还挺不明显的 翻了翻代码修改记录 发现是漏了结尾的 lt style gt 标签 做好本地代码管理真的很重要
  • gradle 两种更新方法

    第一种 Android studio更新 第一步 在你所在项目文件夹下 你项目根目录gradlewrappergradle wrapper properties 替换 distributionUrl https services gradl
  • 【算法/剑指Offer】地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。

    题目描述 地上有一个m行和n列的方格 一个机器人从坐标0 0的格子开始移动 每一次只能向左 右 上 下四个方向移动一格 但是不能进入行坐标和列坐标的数位之和大于k的格子 例如 当k为18时 机器人能够进入方格 35 37 因为3 5 3 7
  • java螺旋数组

    1 程序设计题 对于一个 n 行 m 列的表格 我们可以使用螺旋的方式给表格依次填上正整数 我们称填好的表格为一个螺旋矩阵 例如 一个 4 行 5 列的螺旋矩阵如下 1 2 3 4 5 14 15 16 17 6 13 20 19 18 7
  • jquery 等待3秒钟执行函数

    setTimeout function div2 hide 3000
  • CF1249B2 Books Exchange (hard version) 题解

    题目大意 共 q q q 组询问 对于每一组询问有长度为 n n n 的序列 p p
  • Linux进程内核栈

    进程创建的时候Linux内核会创建内核栈 arm手册也要求内核态有单独的栈 如应用进程在用户态通过系统调用陷入内核态的时候 上下文信息 如cpu寄存器 需要有个地方保存 如此 从内核态切换回用户态时候 能继续从系统调用之后的代码开始执行 这
  • JSON数据采集(采集JSON格式数据)

    如果想要采集JSON格式数据的网页怎么办 Json数据格式的页面 常出现于以下场景 1 滚动加载页面采集 瀑布流加载采集 2 网址没有变化的页面采集 3 采集点击加载更多的页面 这些页面我们都可以尝试使用简数采集器来实现JSON数据采集 1
  • Java 1.5, 1.6, 1.7, 1.8的区别

    对于很多刚接触java语言的初学者来说 要了解一门语言 最好的方式就是要能从基础的版本进行了解 升级的过程 以及升级的新特性 这样才能循序渐进的学好一门语言 今天先为大家介绍一下JDK1 5版本到JDK1 7版本的特性 希望能给予帮助 JD
  • MybatisPlus自定义sql多表关联分页条件查询

    MybatisPlus自定义sql多表关联分页条件查询 mp封装了crud但是对应复杂sql还是需要自己定义 网上对于多表分页查询的mp描述不是很清楚 我在这里重新写一篇文章 1 数据库准备 需要实现的sql是两表关联条件查询 select