热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

MybatisPlus自定义Sql实现多表查询的示例

这篇文章主要介绍了MybatisPlus自定义Sql实现多表查询的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

前言

前段时间看同事的代码,发现他用Layui+MybatisPlus做分页查询做得很规整,认真看了下代码发现这种方式不仅适用于与Layui做分页查询,在任何时候需要多表联查的时候都可以用到。
 以下以Layui分页查询作为参考,在实际应用中可以灵活使用。

分页查询VO对象

@Data
@AllArgsConstructor
@NoArgsConstructor
public class LayuiData {
  private Integer code=0;
  private Long count;
  private String msg="ok";
  private Object data;
}

Controller

这里的“keyWord”和“registerTime”是后台页面可以查询的字段,也就是普通的参数,可以灵活变通。

@GetMapping("/getClientList")
@ResponseBody
public LayUIResult getAll(
    @RequestParam(name = "page", required = true, defaultValue = "1") int num,
    @RequestParam(name = "limit", required = true, defaultValue = "10") int size,
    String keyWord, String registerTime){
  IPage> listPage = clientService.findClientPage(num, size, keyWord,registerTime);
  //返回总数和数据
  return new LayuiData (listPage.getTotal(),listPage.getRecords());
}

Service

IPage> findClientPage(Integer num, Integer size, String keyWord, String registerTime);

ServiceImpl

这里的QueryWrapper内的实例是,不是平常的实体类,返回的也是Map。

@Override
public IPage> findClientPage(Integer num, Integer size, String keyWord, String registerTime) {
  //创建QueryWrapper搜索对象,判断参数不为空则传入参数
  QueryWrapper> wrapper = new QueryWrapper<>();
  if (StringUtils.isNotEmpty(keyWord)) {
    wrapper.like("c.real_name", keyWord).or().like("c.phone", keyWord);
  }
  if (StringUtils.isNotEmpty(registerTime)) {
    String stime = registerTime.substring(0, 20);
    String etime = registerTime.substring(22, 41);
    wrapper.ge("c.register_time", stime).le("c.register_time", etime);
  }
  //创建分页对象
  Page> page = new Page<>(num, size);

  return clientMapper.findClientPage(page, wrapper);
}

Mapper

格式要求,QueryWrapper前面加上@param,括号里的Constants.WRAPPER内容就是"ew",对应xml文件里的ew

IPage> findClientPage(Page> page,@Param(Constants.WRAPPER) QueryWrapper> wrapper);

XML内容

重点在于我们用${ew.customSqlSegment}放在sql语句里,它可以直接把我们的wrapper里的查询数据等同于where查询添加进去


总结

这种方式相当于在业务层已经做好了参数判断,不用再在xml文件内用“if”标签判断了。
 除了在与Layui做分页查询外,在别的需要参数请求的地方也都可以变通的用这种方法,在使用MybatisPlus时使用这种方式可以使代码更简洁,更清晰。
 除此之外,在需要多表联查的时候,这种方式是非常适用的。

MybatiPlus文档

官方文档里面也做介绍,版本需要大于3.0.7
官方链接:使用 Wrapper 自定义SQL

到此这篇关于MybatisPlus自定义Sql实现多表查询的示例的文章就介绍到这了,更多相关MybatisPlus 多表查询内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!


推荐阅读
  • 本项目展示了如何利用Java技术构建一个高效的考勤数据管理系统,特别适用于处理大量数据的情况,如企业员工考勤记录等。项目包括完整的源代码和详细的文档说明,适合用于毕业设计或实际工作场景。 ... [详细]
  • MyBatis 开发技巧:延迟加载与查询缓存详解
    本文详细探讨了 MyBatis 中的延迟加载和查询缓存机制,旨在帮助开发者更好地理解和利用这些特性来优化数据库访问性能。 ... [详细]
  • 本文探讨了随着并发需求的增长,MySQL数据库架构如何从简单的单一实例发展到复杂的分布式系统,以及每一步演进背后的原理和技术解决方案。 ... [详细]
  • 本文探讨了在H2内存数据库中使用to_char函数遇到的问题,包括别名创建失败和堆栈内存溢出的情况,并提供了解决方案。 ... [详细]
  • 本文深入探讨网页游戏的开发流程,涵盖从程序框架设计到具体实现的技术细节,旨在为开发者提供全面的指导。 ... [详细]
  • GBase 8s SQL 指南:多列约束详解
    本文档详细介绍了如何在GBase 8s中使用多列约束格式,将其应用于现有表的一列或多列。这种格式类似于CREATE TABLE语句中的多列约束,但提供了一些额外的选项,如INDEX DISABLED关键字。 ... [详细]
  • PySpark实战:高效使用DataFrame超越RDD
    本文深入探讨了PySpark中DataFrame的使用方法及其相对于传统RDD的优势,旨在帮助开发者更好地理解和利用这一强大工具。 ... [详细]
  • 今天发现Mysql的主从数据库没有同步先上Master库:mysqlshowprocesslist;查看下进程是否Sleep太多。发现很正常。showmaster ... [详细]
  • 本文总结了WebSphere应用服务器出现宕机问题的解决方法,重点讨论了关键参数的调整,包括数据源连接池、线程池设置以及JVM堆大小等,旨在提升系统的稳定性和性能。 ... [详细]
  • 本文探讨了Java编程中MVC模式的优势与局限,以及如何利用Java开发一款基于鸟瞰视角的赛车游戏。 ... [详细]
  • 尽管PHP是一种强大且灵活的Web开发语言,但开发者在使用过程中常会陷入一些典型的陷阱。本文旨在列出PHP开发中最为常见的10种错误,并提供相应的预防建议。 ... [详细]
  • 基于Java的学生宿舍管理系统设计
    本论文探讨了如何利用Java技术设计和实现一个高效的学生宿舍管理系统。该系统旨在提高宿舍管理的效率,减少人为错误,同时增强用户体验。通过集成用户认证、数据管理和查询功能,系统能够满足学校宿舍管理的多样化需求。 ... [详细]
  • 本文介绍了MySQL数据库的安全权限管理思想及其制度流程,涵盖从项目开发、数据库更新到日常运维等多个方面的详细流程控制,旨在通过严格的流程管理和权限控制,有效预防数据安全隐患。 ... [详细]
  • 本文详细解析了 SUCTF 2019 中的 EasySQL 题目,重点探讨了堆叠注入与 UNION 注入的区别及其应用条件。 ... [详细]
  • 本文详细探讨了Xshell6评估版到期后无法使用的常见问题,并提供了有效的解决方案,包括如何合法购买授权以继续使用。 ... [详细]
author-avatar
球球小白痴_693
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有