Mybatis-plus中QueryWrapper的多种用法小结

 更新时间:2023年04月02日 15:40:21   作者:hhzz  
本文主要介绍了Mybatis-plus中QueryWrapper的多种用法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一、 MyBatis-Plus

官网地址:https://baomidou.com/

MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

mp的简单使用
现有一张 User 表,其表结构如下:

其对应的数据库 Schema 脚本如下:

DROP TABLE IF EXISTS user;

CREATE TABLE user
(
    id BIGINT(20) NOT NULL COMMENT '主键ID',
    name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
    age INT(11) NULL DEFAULT NULL COMMENT '年龄',
    email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',
    PRIMARY KEY (id)
);

其对应的数据库 Data 脚本如下:

DELETE FROM user;

INSERT INTO user (id, name, age, email) VALUES
(1, 'Jone', 18, 'test1@baomidou.com'),
(2, 'Jack', 20, 'test2@baomidou.com'),
(3, 'Tom', 28, 'test3@baomidou.com'),
(4, 'Sandy', 21, 'test4@baomidou.com'),
(5, 'Billie', 24, 'test5@baomidou.com');

初始化工程
创建一个空的 Spring Boot 工程(工程将以 H2 作为默认数据库进行演示)

提示

可以使用 Spring Initializer (opens new window)快速初始化一个 Spring Boot 工程

#添加依赖
引入 Spring Boot Starter 父工程:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.5+ 版本</version>
    <relativePath/>
</parent>

引入 spring-boot-starter、spring-boot-starter-test、mybatis-plus-boot-starter、h2 依赖:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>最新版本</version>
    </dependency>
    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <scope>runtime</scope>
    </dependency>
</dependencies>

配置
在 application.yml 配置文件中添加 H2 数据库的相关配置:

# DataSource Config
spring:
  datasource:
    driver-class-name: org.h2.Driver
    schema: classpath:db/schema-h2.sql
    username: root
    password: test
  sql:
    init:
      schema-locations: classpath:db/schema-h2.sql
      data-locations: classpath:db/data-h2.sql

在 Spring Boot 启动类中添加 @MapperScan 注解,扫描 Mapper 文件夹:

@SpringBootApplication
@MapperScan("com.baomidou.mybatisplus.samples.quickstart.mapper")
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

#编码
编写实体类 User.java(此处使用了 Lombok (opens new window)简化代码)

@Data
public class User {
    private Long id;
    private String name;
    private Integer age;
    private String email;
}

编写 Mapper 包下的 UserMapper接口

public interface UserMapper extends BaseMapper<User> {<!--{C}%3C!%2D%2D%20%2D%2D%3E-->}

开始使用
添加测试类,进行功能测试:

@SpringBootTest
public class SampleTest {

    @Autowired
    private UserMapper userMapper;

    @Test
    public void testSelect() {
        System.out.println(("----- selectAll method test ------"));
        List<User> userList = userMapper.selectList(null);
        Assert.assertEquals(5, userList.size());
        userList.forEach(System.out::println);
    }

}

提示

UserMapper 中的 selectList() 方法的参数为 MP 内置的条件封装器 Wrapper,所以不填写就是无任何条件

控制台输出:

User(id=1, name=Jone, age=18, email=test1@baomidou.com)
User(id=2, name=Jack, age=20, email=test2@baomidou.com)
User(id=3, name=Tom, age=28, email=test3@baomidou.com)
User(id=4, name=Sandy, age=21, email=test4@baomidou.com)
User(id=5, name=Billie, age=24, email=test5@baomidou.com)

提示

完整的代码示例请移步:Spring Boot 快速启动示例 (opens new window)| Spring MVC 快速启动示例(opens new window)

小结
通过以上几个简单的步骤,我们就实现了 User 表的 CRUD 功能,甚至连 XML 文件都不用编写!

从以上步骤中,我们可以看到集成MyBatis-Plus非常的简单,只需要引入 starter 工程,并配置 mapper 扫描路径即可。

但 MyBatis-Plus 的强大远不止这些功能,JAVA开发爱好者在使用mybatis-plus的时候,经常使用的是QueryWrapper,QueryWrapper继承自 AbstractWrapper ,自身的内部属性 entity 也用于生成 where 条件及 LambdaQueryWrapper, 可以通过 new QueryWrapper().lambda() 方法获取,下面总结了几种不同的用法:

二、MP–>QueryWrapper 5种更新语句不同写法:

/**
 * 第一种,常用写法
 */
public void updateUser1(){
    //方式一:
    User user = new User();
    user.setAge(29);
    user.setEmail("111111111111.com");

    QueryWrapper queryWrapper = new QueryWrapper();
    queryWrapper.eq("name","Tom");
    update(user,queryWrapper);

}

/**
 * 第二种 UpdateWrapper
 */

public void updateUser2(){

    update(null,new UpdateWrapper<User>().set("age",29)
            .set("email","22222222222222.com").eq("name","Tom"));
}

/**
 * 第三种实体类+LambdaUpdateWrapper
 */

public void updateUser3(){
    User user = new User();
    user.setAge(29);
    user.setEmail("3333333.com");

    update(user,new LambdaUpdateWrapper<User>(
    ).eq(User::getName,"Tom"));
}

/**
 * 第四种 LambdaUpdateWrapper
 */
public void updateUser4(){
    update(null,new LambdaUpdateWrapper<User>().set(User::getAge,29)
            .set(User::getEmail,"4444444.com").eq(User::getName,"Tom"));


}

/**
 * 第五种:Wrappers
 */
public void updateUser5(){

    update(null,Wrappers.<User>update().lambda()
            .set(User::getAge,29)
            .set(User::getEmail,"555555555.com")
            .eq(User::getName,"Tom"));

}

/**
 * 第五种:实体类+Wrappers
 */
public void updateUser6(){
    User user = new User();
    user.setAge(29);
    user.setEmail("6666666.com");
    update(user,Wrappers.<User>update().lambda()

            .eq(User::getName,"Tom"));

}

三、三种查询语句不同写法:

/**
 * 第一种查询
 * @return
 */
public  List<User> selectListUser(){
    List<User> list = baseMapper.selectList(
      Wrappers.<User>lambdaQuery()
            .eq(User::getName, "Tom"));
     return  list;
}

/**
 * 第二种查询
 * @return
 */
public IPage<Map<String, Object>> listPageUser(){
    Page<Map<String, Object>> mapPage = 
      baseMapper.selectMapsPage(
            new Page<>(1, 5), Wrappers.<User>query()
                    .orderByAsc("id"));

    return  mapPage;
}
/**
 * 第三种查询
 * @return
 */
public List<User> listUser(){
    LambdaQueryWrapper<User> lambdaQueryWrapper = new QueryWrapper<User>()
      .lambda();


    List<User> users = baseMapper.selectList(lambdaQueryWrapper);

    return  users;
}

通过上面代码的演示,我们对使用MP的条件构造器进行数据库的delete和insert操作有了更深一步的理解。

到此这篇关于Mybatis-plus中QueryWrapper的多种用法小结的文章就介绍到这了,更多相关Mybatis-plus QueryWrapper用法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解Java编程JDialog窗体的用法及实例

    详解Java编程JDialog窗体的用法及实例

    这篇文章主要介绍了Java编程中JDialog窗体的用法及实例,描述了其特征,具有一定参考价值,需要的朋友可以了解下。
    2017-09-09
  • 浅谈StringEntity 和 UrlEncodedFormEntity之间的区别

    浅谈StringEntity 和 UrlEncodedFormEntity之间的区别

    这篇文章主要介绍了StringEntity 和 UrlEncodedFormEntity之间的区别,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • Java之SpringBean生命周期问题理解

    Java之SpringBean生命周期问题理解

    这篇文章主要介绍了Java之SpringBean生命周期问题理解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • Spring Boot使用GridFS实现文件的上传和下载方式

    Spring Boot使用GridFS实现文件的上传和下载方式

    这篇文章主要介绍了Spring Boot使用GridFS实现文件的上传和下载方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • Java并发编程示例(九):本地线程变量的使用

    Java并发编程示例(九):本地线程变量的使用

    这篇文章主要介绍了Java并发编程示例(九):本地线程变量的使用,有时,我们更希望能在线程内单独使用,而不和其他使用同一对象启动的线程共享,Java并发接口提供了一种很清晰的机制来满足此需求,该机制称为本地线程变量,需要的朋友可以参考下
    2014-12-12
  • Sentinel的熔断降级、资源规则详解与实例

    Sentinel的熔断降级、资源规则详解与实例

    这篇文章主要介绍了Sentinel的熔断降级、资源规则详解与实例,Sentinel是阿里巴巴开源的一款流量控制和熔断降级的框架,它主要用于保护分布式系统中的服务稳定性,Sentinel通过对服务进行流量控制和熔断降级,可以有效地保护系统的稳定性,需要的朋友可以参考下
    2023-09-09
  • Springboot如何通过流返回文件

    Springboot如何通过流返回文件

    这篇文章主要介绍了Springboot如何通过流返回文件,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • mybatis-plus 查询时排除字段方法的两种方法

    mybatis-plus 查询时排除字段方法的两种方法

    我们在开发应用时,在某些应用场景下查询有时需要排除某些字段,本文主要介绍了两种方法,具有一定的参考价值,感兴趣的可以了解一下
    2023-09-09
  • Java this关键字的引用详解

    Java this关键字的引用详解

    每个类中都有一个本类的this引用,类似:类名 this;实例对象时,this引用指向对象本身,其最主要的作用是让类中的方法可以访问本类中的另外一个方法或属性,因为调用一个方法或属性(非类方法/属性)必须要有实例
    2022-03-03
  • Java中class和Class的区别示例详解

    Java中class和Class的区别示例详解

    class 是java的关键字,在声明java类时使用,Class是java JDK提供的一个类,完整路径为java.lang.Class,下面这篇文章主要给大家介绍了关于Java中class和Class区别的相关资料,需要的朋友可以参考下
    2022-04-04

最新评论