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

 更新时间:2020年08月24日 10:28:51   作者:牟野  
这篇文章主要介绍了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<Map<String, Object>> listPage = clientService.findClientPage(num, size, keyWord,registerTime);
  //返回总数和数据
  return new LayuiData (listPage.getTotal(),listPage.getRecords());
}

Service

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

ServiceImpl

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

@Override
public IPage<Map<String, Object>> findClientPage(Integer num, Integer size, String keyWord, String registerTime) {
  //创建QueryWrapper搜索对象,判断参数不为空则传入参数
  QueryWrapper<Map<String, Object>> 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<Map<String, Object>> page = new Page<>(num, size);

  return clientMapper.findClientPage(page, wrapper);
}

Mapper

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

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

XML内容

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

<select id="findClientPage" resultType="java.util.Map">
 SELECT c.id,c.real_name,c.phone,c.`status`,
 //实现将时间转换成固定格式
 DATE_FORMAT(c.register_time,'%Y-%m-%d %H:%i:%s') registerTime,
 SUM(re.money) rechargeMoney, SUM(wi.withdrawal_money) withdrawalMoney,SUM(buy_money) orderMoney,
 wa.balance
 FROM client c
 LEFT JOIN recharge re ON c.id=re.client_id
 LEFT JOIN withdrawal wi ON c.id=wi.client_id
 LEFT JOIN wallet wa ON c.id=wa.client_id
 LEFT JOIN order_position ord on c.id=ord.client_id
 //重点是这里会插入wrapper的搜索语句
 ${ew.customSqlSegment}
 GROUP BY c.id
</select>

总结

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

MybatiPlus文档

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

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

相关文章

  • Java基于jdbc连接mysql数据库操作示例

    Java基于jdbc连接mysql数据库操作示例

    这篇文章主要介绍了Java基于jdbc连接mysql数据库操作,结合完整实例形式分析了java使用jdbc连接mysql数据库的具体步骤与相关注意事项,需要的朋友可以参考下
    2017-07-07
  • IDEA2022创建SpringBoot项目的图文教程

    IDEA2022创建SpringBoot项目的图文教程

    本文主要介绍了IDEA2022创建SpringBoot项目的图文教程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • Eclipse git推送上传错误问题解决方案

    Eclipse git推送上传错误问题解决方案

    这篇文章主要介绍了Eclipse git推送上传错误问题解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • Spring Boot中使用Actuator的/info端点输出Git版本信息

    Spring Boot中使用Actuator的/info端点输出Git版本信息

    这篇文章主要介绍了Spring Boot中使用Actuator的/info端点输出Git版本信息,需要的朋友可以参考下
    2017-06-06
  • Java基于zxing生成二维码矩阵过程解析

    Java基于zxing生成二维码矩阵过程解析

    这篇文章主要介绍了Java基于zxing生成二维码矩阵过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • JAVA获取本地MAC地址的方法

    JAVA获取本地MAC地址的方法

    这篇文章主要介绍了JAVA获取本地MAC地址的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • Java+opencv3.2.0实现人脸检测功能

    Java+opencv3.2.0实现人脸检测功能

    这篇文章主要为大家详细介绍了Java+opencv3.2.0实现人脸检测功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-02-02
  • Java String之contains方法的使用详解

    Java String之contains方法的使用详解

    这篇文章主要介绍了Java String之contains方法的使用详解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • 浅谈java对象结构 对象头 Markword

    浅谈java对象结构 对象头 Markword

    这篇文章主要介绍了浅谈java对象结构 对象头 Markword,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-10-10
  • 记一次Maven项目改造成SpringBoot项目的过程实践

    记一次Maven项目改造成SpringBoot项目的过程实践

    本文主要介绍了Maven项目改造成SpringBoot项目的过程实践,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03

最新评论