@Data @TableName("student") @ApiModel("学生表") public class Student extends BasicQuery { @TableId(type = IdType.ASSIGN_UUID) private String id; @ApiModelProperty(value = "学生姓名") private String name; @ApiModelProperty(value = "学生年龄") private String age; @ApiModelProperty(value = "学校id") private String schoolId; @ApiModelProperty(value = "组织编码") private String orgCode; @ApiModelProperty(value = "班级id") private String classId; @ApiModelProperty(value = "学号") private String studyNum; @ApiModelProperty(value = "身份证号") private String idNum; @ApiModelProperty(value = "性别") private String gender; @ApiModelProperty(value = "职位") private String position; @ApiModelProperty(value = "入学类型") private String entranceType; @ApiModelProperty(value = "户口所在地-省") private String residentProvince; @ApiModelProperty(value = "户口所在地-市") private String residentMunicipality; @ApiModelProperty(value = "户口所在地-区") private String residentCounty; @ApiModelProperty(value = "户口所在地-地址") private String residentAddress; @ApiModelProperty(value = "现居地-省") private String liveProvince; @ApiModelProperty(value = "现居地-市") private String liveMunicipality; @ApiModelProperty(value = "现居地-区") private String liveCounty; @ApiModelProperty(value = "现居地-地址") private String liveAddress; @ApiModelProperty(value = "状态") private Integer status; @ApiModelProperty(value = "逻辑删除") private Integer del; @ApiModelProperty(value = "创建人id") private Integer createId; @ApiModelProperty(value = "创建时间") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") private Date createTime; @ApiModelProperty(value = "修改人id") private Integer updateId; @ApiModelProperty(value = "修改时间") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") private Date updateTime; }
1.初始化lamadaWrapper(MybatisPlus版本3.4.2)
LambdaQueryWrapper<Student> stuQuery = new LambdaQueryWrapper<>();
2.添加查询条件
常用查询条件:大于(gt),大于等于(ge),小于(lt),小于等于(le),等于(eq),模糊(like),在什么之间(between),在什么中(in),不等于(ne)
重载方法:两参和三参,区别在于先决条件(两参没有先决条件)
参数描述:第一个参数,先决条件,满足条件则添加查询条件
第二个参数,对应数据库表以及映射实体的字段,应该用lambda表达式方法引用
第三个参数,对应传入的参数
代码案例:
(1)stuQuery.eq(ObjectUtils.isNotEmpty(stu.getGender()), Course::getGender, stu.getGender());
当stu.getGender()不为空时添加查询条件,查询出,数据库表Student字段gender与stu.getGender()相等时的数据
(2)stuQuery.like(ObjectUtils.isNotEmpty(stu.getName()), Course::getName, stu.getName())
当stu.getName()不为空时添加查询条件,查询出,数据库表Student字段name包含stu.getName()时的数据
(3)stuQuery.gt(ObjectUtils.isNotEmpty(stu.getAge()), Course::getAge, stu.getAge())
当stu.getAge()不为空时添加查询条件,查询出,数据库表Student字段age大于stu.getAge()时的数据
(4)stuQuery.ge(ObjectUtils.isNotEmpty(stu.getAge()), Course::getAge, stu.getAge())
当stu.getAge()不为空时添加查询条件,查询出,数据库表Student字段age大于等于stu.getAge()时的数据
(5)stuQuery.lt(ObjectUtils.isNotEmpty(stu.getAge()), Course::getAge, stu.getAge())
当stu.getAge()不为空时添加查询条件,查询出,数据库表Student字段age小于stu.getAge()时的数据
(6)stuQuery.le(ObjectUtils.isNotEmpty(stu.getAge()), Course::getAge, stu.getAge())
当stu.getAge()不为空时添加查询条件,查询出,数据库表Student字段age小于等于stu.getAge()时的数据
(7)stuQuery.ne(ObjectUtils.isNotEmpty(stu.getAge()), Course::getAge, stu.getAge())
当stu.getName()不为空时添加查询条件,查询出,数据库表Student字段name不等于stu.getName()时的数据
(8)stuQuery.between(ObjectUtils.isNotEmpty(age1) && ObjectUtils.isNotEmpty(age2), Course::getAge, age1, age2)
当先决条件满足时添加查询条件,查询出,数据库表Student字段age在age1和age2之间的数据
(9)queryWrapper.in(Course::getOrgCode, scopeOfData); (scopeOfData是所属岗位数据权限的集合,类型List<String>)
查询出组织编码在对应数据权限范围下的所有数据
3.排序
stuQuery.orderByAsc(User::getCreateTime); // 按 createTime升序排列
stuQuery.orderByDesc(User::getCreateTime); // 按createTime降序排列
4.逻辑判断
and 与条件,or 或条件 stuQuery.and(w -> w .like(Course::getName, course.getSearchKey()) .or() .like(Course::getPosition, course.getSearchKey()));查询出数据库表Student中名称name和职位position中包含全局搜索条件searchKey的数据
5.选择
可以选择只查询出数据库中指定字段的数据,不添加select查询出表中所有字段的数据
stuQuery.select(Student::getName, Student::getPosition);
查询出包含name和position的数据
6.自定义sql
这个贼牛逼,你在sql里面就和你在mapper层里面的xml一样你只需要写下你的查询条件,就会直接拼接到where后面,前面的sql语句还可以用占位符代替,然后传入我们需要的参数,就和数据库查询条件里面#{param}一样,凡是需要传入参数的,只需要用{index},占位,后面传入参数即可 @Override public List<ActivityCountDto> campsiteCountLis(ActivityCountVo vo) { LambdaQueryWrapper<ActivityOrder> aoQuery = new LambdaQueryWrapper<>(); aoQuery.eq(ActivityOrder::getDel, 0); aoQuery.eq(ActivityOrder::getStatus, 2); // 参数解释,第一个先决条件,第二个自定义sql语句可用占位符代替{0}{1}{2}等,第三个及以后都是传入参数,从下标0开始,不限个数 以下语句就代表查询传入的参数vo.getActivityDate()在start_time和end_time之间的数据 aoQuery.apply(ObjectUtils.isNotEmpty(vo.getActivityDate()), "{0} BETWEEN start_time AND end_time", vo.getActivityDate()); List<ActivityOrder> activityOrders = activityCountMapper.selectList(aoQuery); //activityOrders.forEach(System.out::println); return activityOrders; }