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.properties或application.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.INSERT和FieldFill.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. 拓展: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服务错误解决方案 大家好 我是寸铁👊 总结了一篇Error: only one service expected goctl一键转换生成rpc服务错误解决方案的文章✨ 喜欢的小伙伴可以点点关注 💝 问题背景 今天寸铁在…...
从头开始构建和训练 Transformer(上)
1、导 读 2017 年,Google 研究团队发表了一篇名为《Attention Is All You Need》的论文,提出了 Transformer 架构,是机器学习,特别是深度学习和自然语言处理领域的范式转变。 Transformer 具有并行处理功能,可以实现…...
JVM-JVM内存结构(一)
程序计数器 Program Counter Register程序计数器(寄存器) 程序计数器在物理层上是通过寄存器实现的 作用:记住下一条jvm指令的执行地址特点 是线程私有的(每个线程都有属于自己的程序计数器)不会存在内存溢出 虚拟机栈 每个线程运行时所需要的内存称为虚拟机栈…...
React Emotion 如何优雅的使用样式(一)
简介 Emotion 是一个专为使用 JavaScript 编写 css 样式而设计的库。它提供了强大且可预测的样式组合,以及源映射、标签和测试实用程序等功能为开发人员提供了出色的体验,并且支持字符串和对象样式。 与框架无关的样式应用包 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 作为跨平台的系统,对话框并没有采用 Windows API 那种模式,通过返回 mrOK、mrCancel 等结果告诉调用方结果,而是采用了 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单片机实验课二
实验任务一: 用C语言设计实现8个led灯左右移动显示效果。具体要求如下: 左移时,8个灯中的奇数位灯依次点亮; 右移时,8个灯中的偶数灯依次点亮; 如此循环往 #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行转列、列转行可以帮助我们更方便地处理数据,生成需要的报表和结果集。本文将介绍在SQL中如何实现数据表地行转列、列转行操作,以及实际应用示例。 这里通过表下面三张表进行举例 SQL创建数据库和数据表 数据表示例数据分别如下: 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,全称高可用代理,是一款流行的开源软件 TCP/HTTP 负载均衡器和代理解决方案,可在 Linux、macOS 和 FreeBSD 上运行。它最常见的用途是通过将工作负载分布到多台服务器(例如 Web、应用程序、数据库)上来提…...
【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(一对多查询)2.1.1 增加Edge2.1.2 查询方法2.1.2.1 …...
服务器性能监控管理方法及工具
服务器是组织数据中心的主干,无论是优化的用户体验,还是管理良好的资源,服务器都能为您完成所有工作,保持服务器随时可用和可访问对于面向业务的应用程序和服务以最佳水平运行至关重要。 理想的服务器性能需要主动监控物理和虚拟…...
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工具...
业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...
Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...
《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...
3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...
关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...
Reasoning over Uncertain Text by Generative Large Language Models
https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...
