您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關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的多表查詢了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。