MybatisPlus自定义Sql实现多表查询的示例
前言
前段时间看同事的代码,发现他用Layui+MybatisPlus做分页查询做得很规整,认真看了下代码发现这种方式不仅适用于与Layui做分页查询,在任何时候需要多表联查的时候都可以用到。
以下以Layui分页查询作为参考,在实际应用中可以灵活使用。
分页查询VO对象
@Data @AllArgsConstructor @NoArgsConstructor publicclassLayuiData{ privateIntegercode=0; privateLongcount; privateStringmsg="ok"; privateObjectdata; }
Controller
这里的“keyWord”和“registerTime”是后台页面可以查询的字段,也就是普通的参数,可以灵活变通。
@GetMapping("/getClientList") @ResponseBody publicLayUIResultgetAll( @RequestParam(name="page",required=true,defaultValue="1")intnum, @RequestParam(name="limit",required=true,defaultValue="10")intsize, StringkeyWord,StringregisterTime){ IPage
Service
IPage
ServiceImpl
这里的QueryWrapper内的实例是
@Override publicIPage
Mapper
格式要求,QueryWrapper前面加上@param,括号里的Constants.WRAPPER内容就是"ew",对应xml文件里的ew
IPage>findClientPage(Page >page,@Param(Constants.WRAPPER)QueryWrapper >wrapper);
XML内容
重点在于我们用${ew.customSqlSegment}放在sql语句里,它可以直接把我们的wrapper里的查询数据等同于where查询添加进去
SELECTc.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 FROMclientc LEFTJOINrechargereONc.id=re.client_id LEFTJOINwithdrawalwiONc.id=wi.client_id LEFTJOINwalletwaONc.id=wa.client_id LEFTJOINorder_positionordonc.id=ord.client_id //重点是这里会插入wrapper的搜索语句 ${ew.customSqlSegment} GROUPBYc.id
总结
这种方式相当于在业务层已经做好了参数判断,不用再在xml文件内用“if”标签判断了。
除了在与Layui做分页查询外,在别的需要参数请求的地方也都可以变通的用这种方法,在使用MybatisPlus时使用这种方式可以使代码更简洁,更清晰。
除此之外,在需要多表联查的时候,这种方式是非常适用的。
MybatiPlus文档
官方文档里面也做介绍,版本需要大于3.0.7
官方链接:使用Wrapper自定义SQL
到此这篇关于MybatisPlus自定义Sql实现多表查询的示例的文章就介绍到这了,更多相关MybatisPlus多表查询内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。