MybatisPlus+Layui自定義分頁查詢

前言

前段時間看同事的代碼,發(fā)現(xiàn)他用layui+mybatisplus做分頁查詢做得很規(guī)整,很值得學(xué)習(xí),記錄一下

返回給layui的bean
@Data
@AllArgsConstructor
@NoArgsConstructor
public class LayuiData {
    private Integer code=0;
    private Long count;
    private String msg="ok";
    private Object data;
}

Controller

這里的keyWord和registerTime是后臺管理頁面可以查詢的字段傳進來的,也就是普通的參數(shù)

@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);
    //返回總數(shù)和數(shù)據(jù)
    return new LayuiData (listPage.getTotal(),listPage.getRecords());
}
實現(xiàn)類

這里省略了Service代碼,創(chuàng)建的是QueryWrapper<Map<String, Object>>,不是平常的實體類泛型。

@Override
public IPage<Map<String, Object>> findClientPage(Integer num, Integer size, String keyWord, String registerTime) {
    //創(chuàng)建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);
    }
    //創(chuàng)建分頁對象
    Page<Map<String, Object>> page = new Page<>(num, size);

    return clientMapper.findClientPage(page, wrapper);
}
Mapper

格式要求,QueryWrapper前面加上@param,括號里的內(nèi)容就是"ew",對應(yīng)xml文件里的ew

IPage<Map<String, Object>> findClientPage(Page<Map<String, Object>> page, @Param(Constants.WRAPPER) QueryWrapper<Map<String, Object>> wrapper);
XML內(nèi)容

重點在于我們用${ew.customSqlSegment}放在sql語句里,里面可以直接把我們的wrapper里的查詢數(shù)據(jù)等同于where查詢添加進去

<select id="findClientPage" resultType="java.util.Map">
SELECT c.id,c.real_name,c.phone,c.`status`,
//實現(xiàn)將時間轉(zhuǎn)換成固定格式
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>
MybatiPlus文檔

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


官方文檔
總結(jié)

感覺這種方式比在xml用<if>標(biāo)簽判斷的方式更加的簡便,相當(dāng)于在業(yè)務(wù)層已經(jīng)做好了參數(shù)判斷,不用再像<if test="">這樣在sql里面做判斷了,除了在Layui上面用這種方法外,在別的需要參數(shù)請求的地方也都可以變通的用這種方法。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容