SpringBoot基于MyBatis-Plus实现Lambda Query查询的示例代码

本文主要是介绍SpringBoot基于MyBatis-Plus实现Lambda Query查询的示例代码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《SpringBoot基于MyBatis-Plus实现LambdaQuery查询的示例代码》MyBatis-Plus是MyBatis的增强工具,简化了数据库操作,并提高了开发效率,它提供了多种查询方...

引言

MyBATis-Plus 是 MyBatis 的增强工具,简化了数据库操作,并提高了开发效率。它提供了多种查询方式,包括常规的 SQL 查询、Lambda Query 查询、分页查询、条件查询等。在本篇博客中,我们将详细讲解如何使用 MyBatis-Plus 的各种查询方式,涵盖以下内容:

  • 基础环境配置
  • 表结构设计
  • 常见查询方法
  • 普通查询
  • Lambda 查询
  • 条件构造器
  • 聚合查询
  • 分页查询
  • 复杂查询与多表联查

基础环境配置

首先,你需要确保项目已经引入了 MyBatis-Plus 相关的依赖。假设你的项目是基于 Spring Boot 的,下面是如何配置 Maven 依赖的示例。

依赖配置(Maven)

<dependencies>
    <!-- MyBatis-Plus Starter -->
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.5.0</version>
    </dependency>

    <!-- mysql Connector -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-Java</artifactId>
        <version>8.0.23</version>
    </dependency>

    <!-- Spring Boot Starter Web -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

application.yml 配置

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=UTC
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver
  mybatis-plus:
    # 配置 MyBatis-pythonPlus
    mapper-locations: classpath:/mappers/*.XML
    typeAliasesPackage: com.example.demo.entity

表结构设计

假设有以下两个表:

  • demo_student:学生信息
  • demo_class:班级信息

demo_student 表结构

CREATE TABLE demo_student (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(50) NOT NULL,
  age INT,
  class_id INT,
  gender ENUM('M', 'F') DEFAULT 'M',
  FOREIGN KEY (class_id) REFERENCES demo_class(id)
);

demo_student 表存储学生信息,其中 class_id 是外键,指向 demo_class 表。

demo_class 表结构

CREATE TABLE demo_class (
  id INT AUTO_INCREMENT PRIMARY KEY,
  class_name VARCHAR(50) NOT NULL
);

常见查询方法

普通查询(selectOne, selectList, selectById)

  • selectOne:查询单条记录。
  • selectList:查询多条记录。
  • selectById:通过主键查询一条记录。
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.IService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class DemoStudentService {

    @Autowired
    private DemoStudentMapper demoStudentMapper;

    // 查询单个学生
    public DemoStudent getStudentById(Long id) {
        return demoStudentMapper.selectById(id);
    }

    // 查询所有学生
    public List<DemoStudent> getAllStudents() {
        return demoStudentMapper.selectList(new QueryWrapper<>());
    }
}

Lambda Query 查询(LambdaQueryWrapper)

MyBatis-Plus 提供了 LambdaQueryWrapper,可以通过 Lambda 表达式来避免字段名硬编码。

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;

public List<DemoStudent> getStudentsByAge(int age) {
    LambdaQueryWrapper<DemoStudent> queryWrapper = new LambdaQueryWrapper<>();
    // 查询年龄大于指定值的学生
    queryWrapper.gt(DemoStudent::getAge, age);  
    return demoStudentMapper.selectList(queryWrapper);
}

条件构造器(QueryWrapper)

QueryWrapper 允许通过构建条件来查询。它支持 eq、ne、lt、gt、like 等各种条件。

public List<DemoStudent> getStudentsByClassId(Long classId) {
    QueryWrapper<DemoStudent> queryWrapper = new QueryWrapper<>();
    // 根据班级ID查询
    queryWrapper.eq("class_id", classId);  
    return demoStudentMapper.selectList(queryWrapper);
}

条件链式查询

LambdaQueryWraVucJIpwJEdpper 和QueryWrapper支持链式调用,可以将多个条件组合成一个查询。

public List<DemoStudent> getFemaleStudentsOver18() {
    LambdaQueryWrapper<DemoStudent> queryWrapper = new LambdaQueryWrapper<>();
    queryWrapper.eq(DemoStudent::getGender, "F")
                .gt(DemoStudent::getAge, 18);  // 查找性别为女性,且年龄大于18岁的学生
    return demoStudentMapper.selectList(queryWrapper);
}

聚合查询(selectCount, selectMax, selectMin 等)

MyBatis-Plus 支持基本的聚合查询,比如统计、求最大值、最小值、平均值等。

// 查询学生总数
public int geChina编程tTotalStudents() {
    return demoStudentMapper.selectCount(new QueryWrapper<>());
}

// 查询年龄最大值
public Integer getMaxAge() {
    return demoStudentMapper.selectMax(DemoStudent::getAge);
}

// 查询年龄最小值
public Integer getMinAge() {
    return demoStudentMapper.selectMin(DemoStudent::getAge);
}

分页查询

分页查询在实际开发中非常常见,MyBatis-编程Plus 提供了内置的分页功能,可以非常简单地实现。

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

public IPage<DemoStudent> getStudentsPage(int pageNum, int pageSize) {
    Page<DemoStudent> page = new Page<>(pageNum, pageSize);  // 创建分页对象
    LambdaQueryWrapper<DemoStudent> queryWrapper = new LambdaQueryWrapper<>();
    queryWrapper.gt(DemoStudent::getAge, 18);  // 查询年龄大于18的学生
    return VucJIpwJEddemoStudentMapper.selectPage(page, queryWrapper);  // 返回分页结果
}

分页插件配置

分页功能需要在 application.yml 中配置分页插件:

mybatis-plus:
  global-config:
    db-config:
      id-type: auto
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  plugins:
    - com.baomidou.mybatisplus.extension.plugins.pagination.PageInterceptor

复杂查询与多表联查

在 MyBatis-Plus中,虽然不直接支持JOIN操作,但我们可以通过自定义 SQL 来实现复杂的联表查询。
示例:查询学生和班级信息(联查)

import org.apache.ibatis.annotations.Select;
import java.util.List;

public interface DemoStudentMapper {
    
    @Select("SELECT s.id AS student_id, s.name AS student_name, c.class_name " +
            "FROM demo_student s LEFT JOIN demo_class c ON s.class_id = c.id")
    List<StudentWithClass> selectStudentsWithClass();
}

实现自定义查询与复杂查询

对于一些需要自定义 SQL 的场景,可以直接使用 @Select 或 @Update 注解来编写 SQL。

@Select("SELECT * FROM demo_student WHERE age > #{age} AND gender = #{gender}")
List<DemoStudent> selectByAgeAndGender(int age, String gender);

总结

MyBatis-Plus提供了极为丰富的查询功能,通过简洁的 API 和灵活的查询构造器,可以非常方便地进行数据库查询操作。通过以下几点,可以更好地理解和应用 MyBatis-Plus 的查询功能:

  • 普通查询:通过selectOne, selectList, selectById方法可以快速进行数据查询。
  • Lambda查询:通过LambdaQueryWrapper构建条件查询,避免硬编码字段名,提高代码可维护性。
  • 条件构造器:QueryWrapperLambdaQueryWrapper提供了多种条件构建方式,支持链式调用。
  • 分页查询:MyBatis-Plus提供了内置的分页支持,可以轻松进行分页查询。
  • 聚合查询:支持常见的聚合操作,如selectCount, selectMax, selectMin等。
  • 复杂查询:通过自定义 SQL 支持联表查询,处理更复杂的查询需求。

以上就是SpringBoot基于MyBatis-Plus实现Lambda Query查询的示例代码的详细内容,更多关于MyBatis-Plus Lambda Query查询的资料请关注China编程(www.chinasem.cn)其它相关文章!

这篇关于SpringBoot基于MyBatis-Plus实现Lambda Query查询的示例代码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1153038

相关文章

springboot健康检查监控全过程

《springboot健康检查监控全过程》文章介绍了SpringBoot如何使用Actuator和Micrometer进行健康检查和监控,通过配置和自定义健康指示器,开发者可以实时监控应用组件的状态,... 目录1. 引言重要性2. 配置Spring Boot ActuatorSpring Boot Act

使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)

《使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)》在现代软件开发中,处理JSON数据是一项非常常见的任务,无论是从API接口获取数据,还是将数据存储为JSON格式,解析... 目录1. 背景介绍1.1 jsON简介1.2 实际案例2. 准备工作2.1 环境搭建2.1.1 添加

Java实现任务管理器性能网络监控数据的方法详解

《Java实现任务管理器性能网络监控数据的方法详解》在现代操作系统中,任务管理器是一个非常重要的工具,用于监控和管理计算机的运行状态,包括CPU使用率、内存占用等,对于开发者和系统管理员来说,了解这些... 目录引言一、背景知识二、准备工作1. Maven依赖2. Gradle依赖三、代码实现四、代码详解五

java如何分布式锁实现和选型

《java如何分布式锁实现和选型》文章介绍了分布式锁的重要性以及在分布式系统中常见的问题和需求,它详细阐述了如何使用分布式锁来确保数据的一致性和系统的高可用性,文章还提供了基于数据库、Redis和Zo... 目录引言:分布式锁的重要性与分布式系统中的常见问题和需求分布式锁的重要性分布式系统中常见的问题和需求

在Ubuntu上部署SpringBoot应用的操作步骤

《在Ubuntu上部署SpringBoot应用的操作步骤》随着云计算和容器化技术的普及,Linux服务器已成为部署Web应用程序的主流平台之一,Java作为一种跨平台的编程语言,具有广泛的应用场景,本... 目录一、部署准备二、安装 Java 环境1. 安装 JDK2. 验证 Java 安装三、安装 mys

Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单

《Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单》:本文主要介绍Springboot的ThreadPoolTaskScheduler线... 目录ThreadPoolTaskScheduler线程池实现15分钟不操作自动取消订单概要1,创建订单后

JAVA中整型数组、字符串数组、整型数和字符串 的创建与转换的方法

《JAVA中整型数组、字符串数组、整型数和字符串的创建与转换的方法》本文介绍了Java中字符串、字符数组和整型数组的创建方法,以及它们之间的转换方法,还详细讲解了字符串中的一些常用方法,如index... 目录一、字符串、字符数组和整型数组的创建1、字符串的创建方法1.1 通过引用字符数组来创建字符串1.2

python使用watchdog实现文件资源监控

《python使用watchdog实现文件资源监控》watchdog支持跨平台文件资源监控,可以检测指定文件夹下文件及文件夹变动,下面我们来看看Python如何使用watchdog实现文件资源监控吧... python文件监控库watchdogs简介随着Python在各种应用领域中的广泛使用,其生态环境也

el-select下拉选择缓存的实现

《el-select下拉选择缓存的实现》本文主要介绍了在使用el-select实现下拉选择缓存时遇到的问题及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录项目场景:问题描述解决方案:项目场景:从左侧列表中选取字段填入右侧下拉多选框,用户可以对右侧

SpringCloud集成AlloyDB的示例代码

《SpringCloud集成AlloyDB的示例代码》AlloyDB是GoogleCloud提供的一种高度可扩展、强性能的关系型数据库服务,它兼容PostgreSQL,并提供了更快的查询性能... 目录1.AlloyDBjavascript是什么?AlloyDB 的工作原理2.搭建测试环境3.代码工程1.