MybatisPlus+Layui自定义分页查询

前言

前段时间看同事的代码,发现他用layui+mybatisplus做分页查询做得很规整,很值得学习,记录一下

返回给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是后台管理页面可以查询的字段传进来的,也就是普通的参数

@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代码,创建的是QueryWrapper<Map<String, Object>>,不是平常的实体类泛型。

@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,括号里的内容就是"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>
MybatiPlus文档

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


官方文档
总结

感觉这种方式比在xml用<if>标签判断的方式更加的简便,相当于在业务层已经做好了参数判断,不用再像<if test="">这样在sql里面做判断了,除了在Layui上面用这种方法外,在别的需要参数请求的地方也都可以变通的用这种方法。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容