当前位置: 首页 > news >正文

Spring Boot整合MyBatis Plus实现基本CRUD与高级功能

文章目录

    • 1. 引言
    • 2. 项目搭建与依赖配置
      • 2.1 添加MyBatis Plus依赖
      • 2.2 配置数据源与MyBatis Plus
    • 3. 实现基本CRUD功能
      • 3.1 创建实体类
      • 3.2 创建Mapper接口
      • 3.3 实现Service层
      • 3.4 控制器实现
    • 4. 高级功能实现
      • 4.1 自动填充功能
      • 4.2 乐观锁功能
      • 4.3 逻辑删除功能
    • 5. 拓展:MyBatis Plus的其他功能
      • 5.1 条件构造器
      • 5.2 分页查询
      • 5.3 性能分析
    • 6. 总结

在这里插入图片描述

🎉欢迎来到SpringBoot框架学习专栏~


  • ☆* o(≧▽≦)o *☆嗨~我是IT·陈寒🍹
  • ✨博客主页:IT·陈寒的博客
  • 🎈该系列文章专栏:SpringBoot
  • 📜其他专栏:Java学习路线 Java面试技巧 Java实战项目 AIGC人工智能 数据结构学习
  • 🍹文章作者技术和水平有限,如果文中出现错误,希望大家能指正🙏
  • 📜 欢迎大家关注! ❤️

1. 引言

Spring Boot是一款用于快速构建Spring应用程序的框架,而MyBatis Plus是MyBatis的增强工具,提供了许多方便实用的功能,包括基本CRUD操作、自动填充、乐观锁、逻辑删除等。本文将详细介绍如何在Spring Boot项目中整合MyBatis Plus,并展示其基本CRUD功能以及高级功能的实现方式。
在这里插入图片描述

2. 项目搭建与依赖配置

首先,确保你已经搭建好了Spring Boot项目。接下来,我们需要添加MyBatis Plus的依赖。

2.1 添加MyBatis Plus依赖

pom.xml文件中添加以下依赖:

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

2.2 配置数据源与MyBatis Plus

application.propertiesapplication.yml中配置数据库连接信息和MyBatis Plus的相关配置:

spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/testdb?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTCusername: your_usernamepassword: your_passwordmybatis-plus:mapper-locations: classpath:mapper/**/*.xmlglobal-config:db-config:id-type: autoconfiguration:map-underscore-to-camel-case: true

以上配置中,mapper-locations指定了MyBatis Plus的XML映射文件路径,map-underscore-to-camel-case表示数据库字段采用下划线命名,而Java实体类采用驼峰命名。

3. 实现基本CRUD功能

3.1 创建实体类

假设我们有一个实体类User,对应数据库中的user表:

import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;import java.util.Date;@Data
@TableName("user")
public class User {@TableId(type = IdType.AUTO)private Long id;private String username;private String password;private Integer age;@TableField(fill = FieldFill.INSERT)private Date createTime;@TableField(fill = FieldFill.INSERT_UPDATE)private Date updateTime;@TableLogicprivate Integer deleted;
}

在上述实体类中,使用了@TableName注解指定了对应的数据库表名,@TableId表示主键,@TableField用于自动填充,@TableLogic表示逻辑删除字段。

3.2 创建Mapper接口

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;@Mapper
public interface UserMapper extends BaseMapper<User> {
}

MyBatis Plus提供了BaseMapper接口,通过继承该接口,即可获得常见的CRUD功能,无需手动编写SQL。

3.3 实现Service层

import com.baomidou.mybatisplus.extension.service.IService;public interface UserService extends IService<User> {
}

创建一个UserService接口,继承自IService,该接口提供了常用的Service层方法。

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
}

创建UserServiceImpl类,实现UserService接口,并继承自ServiceImpl,实现了其中的方法。

3.4 控制器实现

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;import java.util.List;@RestController
@RequestMapping("/user")
public class UserController {@Autowiredprivate UserService userService;@GetMapping("/{id}")public User getUser(@PathVariable Long id) {return userService.getById(id);}@GetMapping("/list")public List<User> listUsers() {return userService.list();}@PostMappingpublic void addUser(@RequestBody User user) {userService.save(user);}@PutMappingpublic void updateUser(@RequestBody User user) {userService.updateById(user);}@DeleteMapping("/{id}")public void deleteUser(@PathVariable Long id) {userService.removeById(id);}
}

以上代码中,通过注入UserService实现了基本的CRUD操作的接口。

4. 高级功能实现

4.1 自动填充功能

MyBatis Plus提供了自动填充功能,通过@TableField注解的fill属性来指定填充的时机,常用的值有FieldFill.INSERTFieldFill.INSERT_UPDATE

@TableField(fill = FieldFill.INSERT)
private Date createTime;@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;

上述代码中,createTime字段在插入时自动填充,updateTime字段在插入和更新时自动填充。

4.2 乐观锁功能

MyBatis Plus支持乐观锁的实现,通过@Version注解在实体类的版本字段上添加乐观锁。

@Version
private Integer version;

在更新时,MyBatis Plus会自动检测版本字段,如果版本号不匹配,则更新失败。

4.3 逻辑删除功能

MyBatis Plus提供了逻辑删除的功能,通过@TableLogic注解在实体类的逻辑删除字段上添加逻辑删除标记。

@TableLogic
private Integer deleted;

在进行逻辑删除操作时,MyBatis Plus会更新这个字段的值,而不是物理删除记录。

5. 拓展:MyBatis Plus的其他功能

除了上述介绍的功能外,MyBatis Plus还提供了许多其他强大的功能,如条件构造器、分页查询、性能分析、多租户支持等。以下简单介绍一些常用的功能:

5.1 条件构造器

MyBatis Plus的条件构造器可以轻松构建复杂的查询条件:

LambdaQueryWrapper<User> wrapper = Wrappers.<User>lambdaQuery().eq(User::getUsername, "admin").like(User::getPassword, "pass");
List<User> userList = userService.list(wrapper);

5.2 分页查询

MyBatis Plus支持简单的分页查询:

IPage<User> page = new Page<>(1, 10);
IPage<User> userPage = userService.page(page, null);
List<User> userList = userPage.getRecords();

5.3 性能分析

MyBatis Plus提供了性能分析插件,可以方便地查看SQL执行情况:

# application.yml
mybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

通过配置log-impl属性,可以将SQL输出到控制台,方便调试与优化。

6. 总结

通过本文的介绍,我们学习了如何在Spring Boot项目中整合MyBatis Plus,并实现了基本的CRUD功能以及高级功能如自动填充、乐观锁、逻辑删除等。MyBatis Plus的强大功能极大地简化了数据库操作,提高了开发效率。在实际项目中,根据具体需求,我们可以更深入地了解MyBatis Plus提供的各种功能,以更好地应对复杂的业务场景。希望通过本文的学习,读者能够更加熟练地使用Spring Boot和MyBatis Plus进行项目开发。


🧸结尾 ❤️ 感谢您的支持和鼓励! 😊🙏
📜您可能感兴趣的内容:

  • 【Java面试技巧】Java面试八股文 - 掌握面试必备知识(目录篇)
  • 【Java学习路线】2023年完整版Java学习路线图
  • 【AIGC人工智能】Chat GPT是什么,初学者怎么使用Chat GPT,需要注意些什么
  • 【Java实战项目】SpringBoot+SSM实战:打造高效便捷的企业级Java外卖订购系统
  • 【数据结构学习】从零起步:学习数据结构的完整路径

在这里插入图片描述

相关文章:

Spring Boot整合MyBatis Plus实现基本CRUD与高级功能

文章目录 1. 引言2. 项目搭建与依赖配置2.1 添加MyBatis Plus依赖2.2 配置数据源与MyBatis Plus 3. 实现基本CRUD功能3.1 创建实体类3.2 创建Mapper接口3.3 实现Service层3.4 控制器实现 4. 高级功能实现4.1 自动填充功能4.2 乐观锁功能4.3 逻辑删除功能 5. 拓展&#xff1a;My…...

CSS 闪电按钮效果

<template><view class="const"><div class="voltage-button"><button>闪电按钮</button><svg version="1.1" xmlns="http://www.w3.org/2000/svg" x="0px" y="0px" viewBox=&q…...

【Go-Zero】Error: only one service expected goctl一键转换生成rpc服务错误解决方案

【Go-Zero】Error: only one service expected goctl一键转换生成rpc服务错误解决方案 大家好 我是寸铁&#x1f44a; 总结了一篇Error: only one service expected goctl一键转换生成rpc服务错误解决方案的文章✨ 喜欢的小伙伴可以点点关注 &#x1f49d; 问题背景 今天寸铁在…...

从头开始构建和训练 Transformer(上)

1、导 读 2017 年&#xff0c;Google 研究团队发表了一篇名为《Attention Is All You Need》的论文&#xff0c;提出了 Transformer 架构&#xff0c;是机器学习&#xff0c;特别是深度学习和自然语言处理领域的范式转变。 Transformer 具有并行处理功能&#xff0c;可以实现…...

JVM-JVM内存结构(一)

程序计数器 Program Counter Register程序计数器(寄存器) 程序计数器在物理层上是通过寄存器实现的 作用&#xff1a;记住下一条jvm指令的执行地址特点 是线程私有的(每个线程都有属于自己的程序计数器)不会存在内存溢出 虚拟机栈 每个线程运行时所需要的内存称为虚拟机栈…...

React Emotion 如何优雅的使用样式(一)

简介 Emotion 是一个专为使用 JavaScript 编写 css 样式而设计的库。它提供了强大且可预测的样式组合&#xff0c;以及源映射、标签和测试实用程序等功能为开发人员提供了出色的体验&#xff0c;并且支持字符串和对象样式。 与框架无关的样式应用包 Emotion中提供了一个与框…...

1+X运维试题样卷A卷(初级)

云计算A卷 单选题(200分) 1.在OSI模型中,HTTP协议工作在第()层,交换机工作在第()层。(10分) (答案正确:10分) A、7/3 B、7/2 (正确答案) C、6/3 D、6/2 2.Linux有三个查看文件的命令,若希望在查看文件内容过程中可以用光标上下移动来查看文件内容,应使用命令。(10分…...

QT QDialog 中的按钮,如何按下后触发 accepted 消息?

QT 作为跨平台的系统&#xff0c;对话框并没有采用 Windows API 那种模式&#xff0c;通过返回 mrOK、mrCancel 等结果告诉调用方结果&#xff0c;而是采用了 accepted、rejected 等信号确定执行结果。下面介绍几种出发这些信号的方法。 1. 在按钮的 clicked 槽函数中触发 acc…...

seata分布式事务

文章目录 1、分布式事务1.1 事务的ACID原则原子性一致性隔离性持久性 1.2 分布式事务的问题示例代码准备环境1. seata_demo数据库2. 启动nacos seata-demo父工程pom.xml order-servicepom.xmlapplication.ymlOrderApplicationOrderControllerOrderServiceImplAccountClientStor…...

Python HttpServer 之 简单快速搭建本地服务器,并且使用 requests 测试访问下载服务器文件

Python HttpServer 之 搭建本地服务器,并且使用requests访问下载服务器文件测试 目录 Python HttpServer 之 搭建本地服务器,并且使用requests访问下载服务器文件测试...

【Python 实战】---- 实现批量给 pdf 插入 excel 动态生成的印章

1. 需求 想要能否实现批量自动为多个pdf加盖不同六格虚拟章(不改变pdf原有分辨率和文字可识别性);改在pdf首页上方空白位置,一般居中即可;如可由使用者自主选择靠页边距更好,以便部分首页上方有字的文件时人工可微调位置;从上而下,自左往右分别对应 excel 中各个字段;…...

51单片机实验课二

实验任务一&#xff1a; 用C语言设计实现8个led灯左右移动显示效果。具体要求如下&#xff1a; 左移时&#xff0c;8个灯中的奇数位灯依次点亮&#xff1b; 右移时&#xff0c;8个灯中的偶数灯依次点亮&#xff1b; 如此循环往 #include <REGX52.H> void Delay(unsi…...

1-4 动手学深度学习v2-线性回归的简洁实现-笔记

通过使用深度学习框架来简洁地实现 线性回归模型 生成数据集 import numpy as np import torch from torch.utils import data # 从torch.utils中引入一些处理数据的模块 from d2l import torch as d2ltrue_w torch.tensor([2,-3.4]) true_b 4.2 features, labels d2l.syn…...

SQL如何实现数据表行转列、列转行?

SQL行转列、列转行可以帮助我们更方便地处理数据&#xff0c;生成需要的报表和结果集。本文将介绍在SQL中如何实现数据表地行转列、列转行操作&#xff0c;以及实际应用示例。 这里通过表下面三张表进行举例 SQL创建数据库和数据表 数据表示例数据分别如下&#xff1a; data_…...

【React】redux状态管理、react-redux状态管理高级封装模块化

【React】react组件传参、redux状态管理 一、redux全局状态管理1、redux概述2、redux的组成1.1 State-状态1.2 Action-事件1.3 Reducer1.4 Store 3、redux入门案例1.1 前期准备1.2 构建store1.2.1 在src下新建store文件夹1.2.2 在store文件夹下新建index.ts文件1.2.3 在index.t…...

HAProxy 和负载均衡概念简介

简介 HAProxy&#xff0c;全称高可用代理&#xff0c;是一款流行的开源软件 TCP/HTTP 负载均衡器和代理解决方案&#xff0c;可在 Linux、macOS 和 FreeBSD 上运行。它最常见的用途是通过将工作负载分布到多台服务器&#xff08;例如 Web、应用程序、数据库&#xff09;上来提…...

【go】ent操作之CRUD与联表查询

文章目录 1 CRUD1.1 创建1.1.1 单条创建1.1.2 批量创建 1.2 查找1.2.1 查询单条 / 条件准确查询1.2.2 查询单条 / 条件模糊查询1.2.3 查询单条 / In1.2.4 查询全部 1.3 更新1.4 删除 2 联表查询2.1 O2M&#xff08;一对多查询&#xff09;2.1.1 增加Edge2.1.2 查询方法2.1.2.1 …...

服务器性能监控管理方法及工具

服务器是组织数据中心的主干&#xff0c;无论是优化的用户体验&#xff0c;还是管理良好的资源&#xff0c;服务器都能为您完成所有工作&#xff0c;保持服务器随时可用和可访问对于面向业务的应用程序和服务以最佳水平运行至关重要。 理想的服务器性能需要主动监控物理和虚拟…...

AUTOSAR汽车电子嵌入式编程精讲300篇-基于FPGA和CAN协议2.0B的总线控制器研究与设计

目录 前言 研究现状分析 2 CAN总线协议 2.1 CAN总线基本概念 2.2 物理层...

14.1 Ajax与JSON应用(❤❤)

14.1 Ajax与JSON应用 1. Ajax1.1 简介1.2 Ajax使用流程1. 前端创建XMLHttpRequest对象2. 发送Ajax请求3. 处理服务器响应4. 代码2. JSON2.1 简介2.2 JS解析JSON3. Ajax与JSON开发3.1 后端:用Jackson实现JSON序列化输出3.2 前端Ajax处理JSON3.3 Ajax工具...

设计模式和设计原则回顾

设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

stm32G473的flash模式是单bank还是双bank?

今天突然有人stm32G473的flash模式是单bank还是双bank&#xff1f;由于时间太久&#xff0c;我真忘记了。搜搜发现&#xff0c;还真有人和我一样。见下面的链接&#xff1a;https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

【2025年】解决Burpsuite抓不到https包的问题

环境&#xff1a;windows11 burpsuite:2025.5 在抓取https网站时&#xff0c;burpsuite抓取不到https数据包&#xff0c;只显示&#xff1a; 解决该问题只需如下三个步骤&#xff1a; 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...

mac 安装homebrew (nvm 及git)

mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用&#xff1a; 方法一&#xff1a;使用 Homebrew 安装 Git&#xff08;推荐&#xff09; 步骤如下&#xff1a;打开终端&#xff08;Terminal.app&#xff09; 1.安装 Homebrew…...

MinIO Docker 部署:仅开放一个端口

MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...

MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)

macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 &#x1f37a; 最新版brew安装慢到怀疑人生&#xff1f;别怕&#xff0c;教你轻松起飞&#xff01; 最近Homebrew更新至最新版&#xff0c;每次执行 brew 命令时都会自动从官方地址 https://formulae.…...

掌握 HTTP 请求:理解 cURL GET 语法

cURL 是一个强大的命令行工具&#xff0c;用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中&#xff0c;cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...

android RelativeLayout布局

<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:gravity&…...

mac:大模型系列测试

0 MAC 前几天经过学生优惠以及国补17K入手了mac studio,然后这两天亲自测试其模型行运用能力如何&#xff0c;是否支持微调、推理速度等能力。下面进入正文。 1 mac 与 unsloth 按照下面的进行安装以及测试&#xff0c;是可以跑通文章里面的代码。训练速度也是很快的。 注意…...