SpringBoot 集成 Mybatis-Plus,LambdaQueryWrapper 使用方法

🏝️ 博主介绍

大家好,我是 一个搬砖的农民工,很高兴认识大家 😊 ~
👨‍🎓 个人介绍:本人是一名后端Java开发工程师,坐标北京 ~
🎉 感谢关注 📖 一起学习 📝 一起讨论 🌈 一起进步 ~
🙏 作者水平有限,欢迎各位大佬指正留言,相互学习进步 ~

源 码:SpringBoot 集成 Mybatis-Plus

1. mybatis配置 🚀

🍪 1.maven依赖

<!--父依赖,dependency可以不加依赖版本,保证版本兼容-->
<parent>
   <artifactId>spring-boot-starter-parent</artifactId>
   <groupId>org.springframework.boot</groupId>
   <version>2.2.4.RELEASE</version>
</parent>
<dependencies>
   <!-- spring-boot -->
   <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-web</artifactId>
   </dependency>
   <!-- MySQL 驱动 | 8.0.x驱动可以兼容mysql5.7版本-->
   <dependency>
       <groupId>mysql</groupId>
       <artifactId>mysql-connector-java</artifactId>
   </dependency>
   <!-- MyBatis-Plus-->
   <dependency>
       <groupId>com.baomidou</groupId>
       <artifactId>mybatis-plus-boot-starter</artifactId>
       <version>3.2.0</version>
   </dependency>
   <!-- lombok -->
   <dependency>
       <groupId>org.projectlombok</groupId>
       <artifactId>lombok</artifactId>
   </dependency>
</dependencies>

🍪 2.yaml配置

server:
  port: 8089

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3309/swp?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8
    username: root
    password: root

mybatis-plus:
  mapper-locations: classpath:mapper/*.xml # XML 配置文件路径
  type-aliases-package: swp.basis.entity # 实体类包路径
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 指定 MyBatis 使用 stdout 作为日志实现

🍪 3.实体类

@Data
@TableName(value = "user") //mybatis-plus注解
public class UserEntity extends BaseDO implements Serializable {
    private static final long serialVersionUID = 1903236519513043621L;

    @TableId(type = IdType.AUTO) // 依赖于数据库自增,通过entity.getId()返回id
    private Long id;

    /**
     * 名称
     */
    @TableField(condition = SqlCondition.LIKE, whereStrategy = FieldStrategy.NOT_EMPTY)
    private String name;

    /**
     * 性别
     */
    private Integer sex;

    /**
     * 状态
     * 使用 {@link swp.basis.enums.StatusEnum} 枚举
     */
    private Integer status;

    /**
     * 日期
     */
    // 忽略,忽略该字段的策略,默认策略是不能修改为null,避免数据错误。
    // 使调用update方法时可以更新date为null
    @TableField(updateStrategy = FieldStrategy.IGNORED)
    private LocalDateTime date;



}

🍪 4.DAO
dao接口需要继承BaseMapper,泛型为实体类

public interface UserDao extends BaseMapper<UserEntity> {
}

🍪 5.service
service接口需要继承IService,泛型为实体类

public interface UserService extends IService<UserEntity> {
}

🍪 6.serviceImpl
serviceImpl实现service接口,并继承ServiceImpl类,泛型为DAO接口和实体类

@Service
public class UserServiceImpl extends ServiceImpl<UserDao, UserEntity> implements UserService {
}

🍪 7.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="swp.basis.dao.UserDao">
</mapper>

注:记得在启动类加上@MapperScan(basePackages = “swp.basis.dao”)注解,或者在每个dao加上@Mapper

2. Wrapper 包装类 🚀

如图 BaseMapper 类中的一些查询、修改、删除接口会用到 Wrapper 包装类,那么这个 Wrapper 包装类应该怎么使用呢

在这里插入图片描述

🌈 2.1 Mybatis 中提供了哪些 Wrapper 包装类?

Mybatis-Plus 提供了多种 Wrapper 类型,具体使用哪种 Wrapper 类型取决于开发者的需求和个人习惯。以下是 Mybatis-Plus 常用的 Wrapper 类型和适用场景:

🍄 QueryWrapper

QueryWrapper 是 Mybatis-Plus 最常用的 Wrapper 类型之一,用于构建查询条件。可以使用
QueryWrapper 进行等值查询、模糊查询、范围查询、排序等操作。使用 QueryWrapper
进行查询时,需要指定查询的实体类,Wrapper 会根据实体类的属性自动生成查询条件。适用于大部分查询场景。

🍄 UpdateWrapper

UpdateWrapper 是用于构建更新条件的 Wrapper 类型,可以使用 UpdateWrapper
进行等值更新、自增更新、条件更新等操作。使用 UpdateWrapper 进行更新时,需要指定更新的实体类和更新条件,Wrapper
会根据实体类的属性自动生成更新条件。适用于大部分更新场景。

🍄 LambdaQueryWrapper

LambdaQueryWrapper 是使用 Lambda 表达式构建查询条件的 Wrapper 类型,可以使用
LambdaQueryWrapper 进行等值查询、模糊查询、范围查询、排序等操作。LambdaQueryWrapper 可以使用
Java 8 的 Lambda 表达式进行条件构建,代码更加简洁易读。适用于需要使用 Lambda 表达式进行条件构建的查询场景。

🍄 LambdaUpdateWrapper

LambdaUpdateWrapper 是使用 Lambda 表达式构建更新条件的 Wrapper 类型,可以使用
LambdaUpdateWrapper 进行等值更新、自增更新、条件更新等操作。LambdaUpdateWrapper 可以使用 Java
8 的 Lambda 表达式进行条件构建,代码更加简洁易读。适用于需要使用 Lambda 表达式进行条件构建的更新场景。

🌈 2.2 QueryWrapper 常用方法

Mybatis-Plus 的 QueryWrapper 提供了多个方法,可以用于构建查询条件。以下是 QueryWrapper 中常用的方法及其用法示例:

// 1.等值查询,用于匹配指定字段等于指定值的记录
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("name", "张三");

// 2.不等于查询,用于匹配指定字段不等于指定值的记录
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.ne("age", 18);

// 3.大于查询,用于匹配指定字段大于指定值的记录。
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.gt("age", 18);

// 4.大于等于查询,用于匹配指定字段大于等于指定值的记录
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.ge("age", 18);

// 5.小于查询,用于匹配指定字段小于指定值的记录
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.lt("age", 18);

// 6.小于等于查询,用于匹配指定字段小于等于指定值的记录。
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.le("age", 18);

// 7.范围查询,用于匹配指定字段在指定范围内的记录。
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.between("age", 18, 25);

// 8.模糊查询,用于匹配指定字段包含指定字符串的记录。可以使用 % 通配符表示任意字符,使用 _ 通配符表示任意单个字符。
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.like("name", "张%");

// 9.不包含查询,用于匹配指定字段不包含指定字符串的记录。
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.notLike("name", "%三");

// 10.IN 查询,用于匹配指定字段在指定集合内的记录。
QueryWrapper<User> wrapper = new QueryWrapper<>();
List<Integer> ages = Arrays.asList(18, 20, 22);
wrapper.in("age", ages);

// 11.NOT IN 查询,用于匹配指定字段不在指定集合内的记录。
QueryWrapper<User> wrapper = new QueryWrapper<>();
List<Integer> ages = Arrays.asList(18, 20, 22);
wrapper.notIn("age", ages);

// 12.NULL 查询,用于匹配指定字段为 NULL 的记录。
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.isNull("email");

// 13.NOT NULL 查询,用于匹配指定字段不为 NULL 的记录。
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.isNotNull("email");

// 14.升序排序,用于按照指定字段升序排列查询结果。
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.orderByAsc("age"<