MyBatisPlus(1):快速入门

article/2025/9/8 21:04:50

我们知道,MyBatis是一个优秀的操作数据库的持久层框架(优秀持久层框架——MyBatis),其基于底层的JDBC进行高度封装,极大的简化了开发。但是对于单表操作而言,我们需要重复地编写简单的CRUD语句。这其实是不必要的,为此,MyBatisPlus框架在MyBatis框架的基础上进一步封装,提供了大量操作单表CRUD的方法,进一步的提高了我们的开发效率。

MyBatisPlus框架简介

MyBatisPlus和MyBatis的关系

顾名思义,MyBatisPlusMyBatis的后面添加了plus,从词义上来看应该是MyBatis的升级版;事实也如此,MyBatisPlus框架完全支持MyBatis框架的用法(我们在引入了MyBatisPlus框架的依赖之后就不需要再引入MyBatis框架的依赖了)。那是不是意味着MyBatisPlus将要取代MyBatis了?完全不是这样:在MyBatisPlus的官网上,开发者是用这样的图来描述二者的关系的:

TO BE THE BEST PARTNER OF MYBATIS(成为MyBatis最好的伙伴),这是开发者的原话。MyBatisMyBatisPlus二者就好像魂斗罗的两兄弟一样,共同为简化我们的开发而努力。MyBatisPlus框架绝对不是为了取代MyBatis框架出现的,并且MyBatisPlus框架目前也没有能力完全取代MyBatis框架。

MyBatisPlus框架的特点

润物无声

MyBatisPlus框架只做增强而不做改变,因为引入它不会对现有的工程产生影响,如丝般顺滑。

效率至上

MyBatisPlus框架只需要简单配置,即可快速的进行单表CRUD操作,从而节省大量的时间。

丰富功能

代码生成、自动分页、逻辑删除、自动填充、拦截器等功能一应俱全。

广泛认可

连续5年获得开源中国年度最佳开源项目殊荣,Github累计16KStar

这么介绍MyBatisPlus框架也许不够直观,那让我们使用一个快速入门的DEMO来直观展示MyBatisPlus框架是如何简化我们的开发的。

MyBatisPlus框架入门案例

在项目中使用MyBatisPlus框架一共可分为3步。

引入依赖

想要使用一个框架,我们肯定需要引入对应的依赖,以下是MyBatisPlus框架的最新依赖:

<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus</artifactId><version>3.5.12</version>
</dependency>

因为上文提到了MyBatisPlus框架完全支持MyBatis框架的用法,所以说我们在引入了MyBatisPlus框架依赖之后,如果想要使用MyBatis框架,无需额外的引入,即可使用。

自定义Mapper继承BaseMapper接口

MyBatisPlus框架提供了很多的方法来简化我们的单表CRUD操作这些方法被封装在了一个名为BaseMapper<>的接口中,想要使用这些方法,我们就需要创建一个接口来继承这个接口,注意,在继承时,需要指明BaseMapper<>中的泛型:

EMP实体类:

package com.wzb.pojo;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDate;
import java.time.LocalDateTime;@Data
@NoArgsConstructor
@AllArgsConstructor
public class Emp {private Integer id;private String username;private String password;private String name;private Integer gender;private String phone;private String image;private Integer job;private LocalDate entryDate;private Integer deptId;private LocalDateTime createTime;private LocalDateTime updateTime;
}

自定义Mapper继承BaseMapper接口:

package com.wzb.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.wzb.pojo.Emp;
import org.apache.ibatis.annotations.Mapper;@Mapper
public interface EmpMapper extends BaseMapper<Emp> {
}

需要注意,在使用自定义Mapper继承BaseMapper接口的时候,需要指明BaseMapper的泛型。

使用对应方法

此时我们就可以使用BaseMapper中封装好的方法来简化单表查询了:

package com.wzb;import com.wzb.mapper.EmpMapper;
import com.wzb.pojo.Emp;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import java.time.LocalDate;
import java.time.LocalDateTime;@SpringBootTest
class JavaWeb13MyBatisPlusApplicationTests {@Autowiredprivate EmpMapper empMapper;/*** 查询测试*/@Testpublic void queryTest() {Emp emp = empMapper.selectById(1);System.out.println(emp);}/*** 增加测试*/@Testpublic void insertTest() {Emp emp = new Emp();emp.setId(100);emp.setUsername("测试员工");emp.setPassword("123456");emp.setName("测试员工");emp.setGender(0);emp.setPhone("1310000001");emp.setImage("https://123.com");emp.setJob(1);emp.setEntryDate(LocalDate.now());emp.setDeptId(1);emp.setCreateTime(LocalDateTime.now());emp.setUpdateTime(LocalDateTime.now());empMapper.insert(emp);}/*** 删除测试*/@Testpublic void deleteTest() {empMapper.deleteById("100");}/*** 修改测试*/@Testpublic void updateTest() {Emp emp = new Emp();emp.setId(1);emp.setUsername("张三");empMapper.updateById(emp);}}

这是一个简单的CRUD示例,包含了对于EmpCRUD,但是我们的EmpMapper中是没有任何代码的,仅仅只是继承了BaseMapper的接口,这几个方法分别使用了BaseMapper接口中的selectByIdinsertdeleteByIdupdateById方法,这些方法都是十分简单的CRUD方法,编码及其规范,都可以见名知意,看到方法名就知道是干什么的,需要给方法传递什么参数。

总结

MyBatisPlus框架在MyBatis框架的基础上进一步封装,提供了大量操作单表CRUD的方法,进一步的提高了我们的开发效率。MyBatisPlus框架的快速入门极其简单,但是MyBatis主要聚焦于单表查询的简化,对于简单的CRUD的SQL语句,开发者无需手写,直接使用封装方法即可,但是对于复杂的多表联查的SQL语句,还是需要开发者自己编写SQL语句完成。所以说MyBatisPlus框架和MyBatis框架都是需要我们掌握的,MyBatisPlus框架并不能直接代替MyBatis框架。

在这个快速入门的Demo中,我们使用了BaseMapper中封装的方法来简化查询,那MyBatisPlus框架是如何知道这些方法需要操作数据库中的哪一张表呢?且听下文分解。


http://www.hkcw.cn/article/dWbHlasNPn.shtml

相关文章

【ARM】【FPGA】【硬件开发】Chapter.1 AXI4总线协议

Chapter.1 AXI4总线协议 作者&#xff1a;齐花Guyc(CAUC) 一、总线介绍 AXI4总线 AXI4总线就像是SoC内部的“高速公路”&#xff0c;负责在不同硬件模块之间高效传输数据。 AXI4协议通过 5个独立通道 传输数据和控制信号&#xff0c;每个通道都有自己的信号线&#xff0c;互…

.NET 7 AOT 使用及 .NET 与 Go 语言互操作详解

.NET 7 AOT 使用及 .NET 与 Go 语言互操作详解 目录 .NET 7 AOT 使用及 .NET 与 Go 语言互操作详解 一、背景与技术概述 1.1 AOT 编译技术简介 1.2 Go 语言与 .NET 的互补性 二、.NET 7 AOT 编译实践 2.1 环境准备 2.2 创建 AOT 项目 2.3 AOT 编译流程 2.4 调试信息处…

Shortest path 代码

Project https://graphics.cs.utah.edu/research/projects/shortest-path-to-boundary/ Build and Debug Fork:(在Win10上&#xff09; https://github.com/chunleili/Shortest-Path-to-Boundary-for-Self-Intersecting-Meshes commit hash d3160168d2b6a58188d12e6cd959da…

Spring框架学习day1--基础概念

Spring基础部分**轻量级的**IOC&#xff1a;控制反转&#xff08;对象由自己管理变成交给框架管理&#xff09;AOP&#xff1a;面向切面编程一站式BaenSpring体系结构 Spring Hello World 搭建 Spring基础部分 Spring是一个轻量级的IOC、AOP的一站式java开发框架&#xff0c;为…

立志成为一名优秀测试开发工程师(第九天)——使用fiddler工具、request库进行接口测试

接口测试学习 目录 一、接口测试的介绍 二、抓包软件Fiddler的使用 三、使用Python的Request库发送get、post请求&#xff1a; 1.get请求 2.post请求 四、总结 登录接口实现 认证请求处理 异常处理 高级配置 接口测试工具类封装 测试用例设计规范 Cookie处理方案 …

【面板数据】各地区新型数字基础设施数据集(2002-2025年)

新型数字基础设施是利用新一代信息技术&#xff08;如5G、人工智能、物联网、大数据、区块链等&#xff09;构建的基础设施体系&#xff0c;主要服务于信息传输、计算存储、智能分析和融合应用等环节。新型数字基础设施作为引领经济社会数字化转型的重要支撑&#xff0c;在各地…

小程序 - 视图与逻辑

个人简介 👨‍💻‍个人主页: 魔术师 📖学习方向: 主攻前端方向,正逐渐往全栈发展 🚴个人状态: 研发工程师,现效力于政务服务网事业 🇨🇳人生格言: “心有多大,舞台就有多大。” 📚推荐学习: 🍉Vue2 🍋Vue3 🍓Vue2/3项目实战 🥝Node.js实战 🍒T…

zynq ad7616 调试笔记

环境 zynq7020 ps端的spi外接硬件的ad7616模块&#xff08;非ip核&#xff09; 1 下载 https://github.com/analogdevicesinc/no-OS/blob/2019_R1/ad7616-sdz/ad7616_sdz.c 2 在zynq的sdk中新建ad7616的app程序&#xff0c;将上图方框中的文件拷贝过来并编译 3 移植 ad7616…

如何轻松将 iPhone 备份到外部硬盘

当您的iPhone和电脑上的存储空间有限时&#xff0c;您可能希望将iPhone备份到外部硬盘上&#xff0c;这样可以快速释放iPhone上的存储空间&#xff0c;而不占用电脑上的空间&#xff0c;并为您的数据提供额外的安全性。此外&#xff0c;我们还提供 4 种有效的解决方案&#xff…

从Homebrew找到openssl.cnf文件并拷贝到Go项目下使用

安装OpenSSL 在 macOS 上下载和安装 OpenSSL 最常见和推荐的方式是使用 Homebrew&#xff0c;这是一个 macOS 缺失的包管理器。 如果您还没有安装 Homebrew&#xff0c;请先安装它。安装 Homebrew 后&#xff0c;安装 OpenSSL 只需要一条命令。 步骤 1&#xff1a;安装 Home…

Socket编程基础

这篇博客我们主要用来讲解TCP和UDP的socket编程。 概念 大多数网络协议都是由软件实现的&#xff08;特别是协议栈中的高层协议&#xff09;&#xff0c;而且绝大多数计算机系统都将运输层以下的网络协议在操作系统的内核中进行实现。应用程序要想执行网络操作&#xff0c;必…

什么是物化视图(Materialized View)?

分析师和工程师经常面临一个共同的困境&#xff1a;随着数据量激增&#xff0c;查询性能急剧下降。一个看似简单的多表联合查询可能需要耗时数分钟甚至数小时&#xff0c;一个常规的实时大屏可能因数据处理缓慢而失去时效价值。当数据规模从 GB 级增长到 TB 甚至 PB 级时&#…

USB Redirector对比国产USB Server方案:软硬之争与技术突围

在远程设备共享领域&#xff0c;‌USB Redirector‌以其轻量级跨平台特性长期占据国际主流市场&#xff0c;支持Windows/Linux系统下的无缝USB设备网络共享。然而&#xff0c;随着国产化替代需求的爆发&#xff0c;以‌朝天椒USB Server‌为代表的软硬一体化方案&#xff0c;凭…

PP-OCRv5 C++封装DLL C#调用源码分享

目录 说明 效果 C#调用效果 项目 C# C 头文件 源文件 C#调用 下载 说明 C封装DLL&#xff0c;C#调用源码分享 效果 C#调用效果 项目 C# C 头文件 #include <windows.h> #include <iostream> #include <opencv2/opencv.hpp> #include <stri…

RISC-V PMA、PMP机制深入分析

1 PMA PMA&#xff08;Physical Memory Attributes&#xff09;&#xff0c;物理内存属性&#xff0c;顾名思义就是用来设置物理内存属性的&#xff0c;但这里说“设置”&#xff0c;并不合理&#xff0c;因为一般情况下各存储的属性&#xff0c;在芯片设计时就固定了&#xf…

桂花网体育运动监测方案:开启幼儿园运动健康管理新篇章

在幼儿教育领域&#xff0c;运动能力的培养与健康监测始终是备受关注的核心环节。随着科技的飞速发展&#xff0c;如何科学、有效地监测幼儿的运动状态&#xff0c;成为了幼儿园教育者面临的一大挑战。桂花网体育运动监测方案凭借其高效、精准、智能化的特性&#xff0c;为幼儿…

第6讲、 Odoo 18 `tools` 模块深度分析

Odoo 18 中的 odoo/tools 目录是核心工具模块的集合&#xff0c;封装了大量通用功能&#xff0c;包括数据处理、安全校验、缓存优化、文件处理、时间转换、国际化、多线程处理等。这些工具模块在整个 Odoo 框架中被频繁引用&#xff0c;是系统高效运行和代码解耦的重要基础。 &…

如何在矩池云实例上开启应用服务的访问端口

AI 应用开发越来越火热&#xff0c;矩池云平台上也相应出现了越来越多的 AI 应用开发者&#xff0c;这里详细介绍下大家在使用过程中经常遇到的一个问题&#xff1a;在矩池云的实例上&#xff0c;如何为应用服务开启外部可访问的端口&#xff1f; 根据开发者有没有启动实例&…

首发支持! 基于昇腾MindIE玩转InternVL3多模态理解最新模型

2025年4月16日&#xff0c;上海人工智能实验室&#xff08;上海AI实验室&#xff09;升级并开源了通用多模态大模型书生万象3.0&#xff08;InternVL3&#xff09;。通过采用创新的多模态预训练和后训练方法&#xff0c;InternVL3 多模态基础能力全面提升&#xff0c;在专家级基…

深入解析Java8核心新特性(Optional、新的日期时间API、接口增强)

文章目录 前言一、Optional&#xff1a;优雅处理null1.1 Optional设计哲学1.2 Optional基础操作1.3 Optional链式操作1.4 高级应用1.5 Optional实战案例 二、新的日期时间API&#xff1a;解决历史痛点2.1 java.time 设计哲学与核心架构2.2 核心类详解与使用基本日期时间类时区相…