mybatis-plus实现多条件组合查询带分页功能.附上详细代码

在这里插入图片描述如上图所示,假设前端页面上显示的是一个讲师数据列表,其中包括了首页,上一页,下一页等等.前端展示虽然挺明了的,但是后端的数据库是怎么实现按条件调出json格式的数据呢.这就是一个令人头疼的问题了.但是问题还是需要解决的,所以我们应该这么做.
第一步:把条件值传递到接口中
把条件值封装到对象里面,再把对象传递到接口里面.
所以建一个实体类,专门用于存条件的属性.

package com.qiu.eduservice.entity.vo;

import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

@Data
public class TeacherQuery {

    @ApiModelProperty(value = "教师名称,模糊查询")
    private String name;

    @ApiModelProperty(value = "头衔 1高级讲师 2首席讲师")
    private Integer level;

    @ApiModelProperty(value = "查询开始时间", example = "2019-01-01 10:10:10")
    private String begin;//注意,这里使用的是String类型,前端传过来的数据无需进行类型转换

    @ApiModelProperty(value = "查询结束时间", example = "2019-12-01 10:10:10")
    private String end;
}

然后在控制器中去编写逻辑代码.

 //4.条件查询带分页
    @GetMapping("pageTeacherCondition/{current}/{limit}")
    public R pageTeacherCondition(@PathVariable long current,
                                  @PathVariable long limit,
                                  TeacherQuery teacherQuery){
        //创建一个page对象
        Page<EduTeacher> pageTeacher = new Page<>();
        //构建条件
        QueryWrapper<EduTeacher> queryWrapper = new QueryWrapper<>();
        //多条件组合查询,mybatis学过动态sql
        String name = teacherQuery.getName();
        Integer level = teacherQuery.getLevel();
        String begin = teacherQuery.getBegin();
        String end = teacherQuery.getEnd();
        //判断条件值是否为空,如果不为空,拼接条件
        if (!StringUtils.isEmpty(name)){
            queryWrapper.like("name",name);
        }
        if (!StringUtils.isEmpty(level)){
            queryWrapper.eq("level",level);
        }
        if (!StringUtils.isEmpty(begin)){
            queryWrapper.ge("gmt_create",begin);//这里加的是表中的字段名称,ge 大于等于
        }
        if (!StringUtils.isEmpty(end)){
            queryWrapper.le("gmt_create",end);//le 小于等于
        }

        //调用方法实现条件分页查询
        teacherService.page(pageTeacher,queryWrapper);
        long total = pageTeacher.getTotal();//总记录数
        //方式一
        List<EduTeacher> records = pageTeacher.getRecords();//数据list的集合
        Map map = new HashMap<>();
        map.put("total",total);
        map.put("rows",records);
        return R.ok().data(map);
    }

进行一个接口的测试:
在这里插入图片描述在这里插入图片描述注意一个问题:
responseBody
返回数据,返回json数据

requestBody
使用json来传递数据,把json数据封装到对应对象里面
如:前端传来的数据,会变成json格式封装到对象中

注意:如果后端传对象使用了requestBody注解,就需要使用post提交方式
在这里插入图片描述在这里插入图片描述由于前端的条件值可以都不设置,所以在requestBody中需要加上required=false.表示这个值可以没有

在这里插入图片描述完整的controller代码:

 //4.条件查询带分页
    @PostMapping("pageTeacherCondition/{current}/{limit}")
    public R pageTeacherCondition(@PathVariable long current,
                                  @PathVariable long limit,
                                  @RequestBody(required = false) TeacherQuery teacherQuery){
        //创建一个page对象
        Page<EduTeacher> pageTeacher = new Page<>(current,limit);
        //构建条件
        QueryWrapper<EduTeacher> queryWrapper = new QueryWrapper<>();
        //多条件组合查询,mybatis学过动态sql
        String name = teacherQuery.getName();
        Integer level = teacherQuery.getLevel();
        String begin = teacherQuery.getBegin();
        String end = teacherQuery.getEnd();
        //判断条件值是否为空,如果不为空,拼接条件
        if (!StringUtils.isEmpty(name)){
            queryWrapper.like("name",name);
        }
        if (!StringUtils.isEmpty(level)){
            queryWrapper.eq("level",level);
        }
        if (!StringUtils.isEmpty(begin)){
            queryWrapper.ge("gmt_create",begin);//这里加的是表中的字段名称,ge 大于等于
        }
        if (!StringUtils.isEmpty(end)){
            queryWrapper.le("gmt_create",end);//le 小于等于
        }

        //调用方法实现条件分页查询
        teacherService.page(pageTeacher,queryWrapper);
        long total = pageTeacher.getTotal();//总记录数
        //方式一
        List<EduTeacher> records = pageTeacher.getRecords();//数据list的集合
        Map map = new HashMap<>();
        map.put("total",total);
        map.put("rows",records);
        return R.ok().data(map);
    }

这样修改之后我们来看看swagger的变化

在这里插入图片描述
这样我们传的就是json数据了.

  • 6
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Mybatis-plus是一个基于Mybatis的增强工具,提供了很多实用的功能,其中包括多条件分页和多表联合查询。下面分别介绍一下这两个功能实现方法。 多条件分页实现: 1. 在mapper.xml文件中定义查询语句,使用limit关键字实现分页功能。 ``` <select id="selectByCondition" resultMap="BaseResultMap"> select * from table_name <where> <if test="param1 != null"> and column1 = #{param1} </if> <if test="param2 != null"> and column2 = #{param2} </if> </where> order by column3 desc limit #{offset}, #{pageSize} </select> ``` 2. 在dao层中定义查询方法,使用Page对象传递分页参数,并调用mapper中定义的查询语句。 ``` public Page<TableEntity> selectByCondition(Page<TableEntity> page, String param1, String param2) { page.setRecords(baseMapper.selectByCondition(page, param1, param2)); return page; } ``` 3. 在service层中调用dao中定义的查询方法,获取分页结果。 ``` public Page<TableEntity> selectByCondition(int pageNum, int pageSize, String param1, String param2) { Page<TableEntity> page = new Page<>(pageNum, pageSize); return dao.selectByCondition(page, param1, param2); } ``` 多表联合查询实现: 1. 在mapper.xml文件中定义关联查询语句,使用join关键字实现多表关联。 ``` <select id="selectByJoin" resultMap="BaseResultMap"> select t1.*, t2.column1 as column2 from table1 t1 join table2 t2 on t1.id = t2.id where t1.column1 = #{param1} and t2.column2 = #{param2} </select> ``` 2. 在dao层中定义查询方法,调用mapper中定义的关联查询语句。 ``` public List<Map<String, Object>> selectByJoin(String param1, String param2) { return baseMapper.selectByJoin(param1, param2); } ``` 3. 在service层中调用dao中定义的查询方法,获取查询结果。 ``` public List<Map<String, Object>> selectByJoin(String param1, String param2) { return dao.selectByJoin(param1, param2); } ``` 以上就是Mybatis-plus实现条件分页和多表联合查询详细解析。希望能够帮助到你。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值