Mybatis-plus 中LambdaQueryWrapper使用总结

@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;
}

MyBatis-Plus是一个Java持久层框架,它在MyBatis的基础上提供了更加便捷和强大的功能。LambdaQueryWrapperMyBatis-Plus的一个查询条件构造器,它可以通过Lambda表达式来编写查询条件,使得代码更加简洁和易读。 使用LambdaQueryWrapper可以按照以下步骤进行: 1. 导入相关的依赖:在项目的pom.xml文件添加MyBatis-Plus的依赖。 2. 创建LambdaQueryWrapper对象:通过LambdaQueryWrapper的构造方法创建一个查询条件构造器对象。 3. 编写查询条件:使用LambdaQueryWrapper对象的方法来编写查询条件。可以使用Lambda表达式来指定查询字段、条件和关联关系等。 4. 执行查询操作:调用MyBatis-Plus提供的相应方法执行查询操作,如selectList、selectOne等。 下面是一个简单的示例代码,演示如何使用LambdaQueryWrapper进行查询: ```java import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; importimport com.example.demo.entity.User; import com.example.demo.mapper.UserMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class UserService { @Autowired private UserMapper userMapper; public List<User> getUserListByAge(int age) { LambdaQueryWrapper<User> queryWrapper = Wrappers.lambdaQuery(); queryWrapper.eq(User::getAge, age); return userMapper.selectList(queryWrapper); } } ``` 在上面的代码,我们首先导入了LambdaQueryWrapperWrappers类。然后,在getUserListByAge方法,我们创建了一个LambdaQueryWrapper对象queryWrapper,并使用eq方法指定了查询条件,即查询年龄等于指定值的用户记录。最后,调用userMapper的selectList方法执行查询操作,并返回查询结果。 这只是LambdaQueryWrapper的一个简单示例,你可以根据实际需求使用其他方法和条件来编写更复杂的查询条件。同时,MyBatis-Plus还提供了很多其他的功能和特性,你可以查阅官方文档来了解更多详情。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值