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

前言

前段时间看同事的代码,发现他用Layui+MybatisPlus做分页http://www.cppcns.com查询做得很规整,认真看了下代码发现这种方式不仅适用于与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 re

Service

IPage> fiwww.cppcns.comInteger 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查询添加进去

&ljava.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

总结

这种方式相当于在业务层已经做好了参数判断,不用再在xml文件内用“if”标签判断了。

除了在与Layui做分页查询外,在别的需要参数请求的地方也都可以变通的用这种方法,在使用MybatisPlus时使用这种方式可以使代码更简洁,更清晰。

除此之外,在需要多表联查的时候,这种方式是非常适用的。

MybatiPlus文档

官方文档里面也做介绍,版本需要大于3.0.7

官方链接:使用 Wrapper 自定义SQL

303f271f043b199ebe5e17331b6d909c.png

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

本文标题: MybatisPlus自定义Sql实现多表查询的示例

本文地址: http://www.cppcns.com/ruanjian/java/337599.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值