当前位置: 代码网 > it编程>编程语言>Java > SpringBoot基于MyBatis-Plus实现Lambda Query查询的示例代码

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

2025年01月13日 Java 我要评论
引言mybatis-plus 是 mybatis 的增强工具,简化了数据库操作,并提高了开发效率。它提供了多种查询方式,包括常规的 sql 查询、lambda query 查询、分页查询、条件查询等。

引言

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-plus
    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);
}

条件链式查询

lambdaquerywrapper 和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 gettotalstudents() {
    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 demostudentmapper.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查询的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com