[MyBatis-Plus]快速入门
介绍
MyBatis-Plus是MyBatis的好朋友, 与MyBatis配合, 实现开发效率的提高
官网:
特点:
- 润物细无声: 只做增强不做改变, 引入它不会对现有工程产生影响, 如丝般顺滑
- 效率自上: 只需简单配置, 即可快速进行单表CRUD, 从而节省大量时间
- 功能丰富: 代码生产, 自动分页, 逻辑删除, 自动填充等功能一应俱全
单表CRUD
需求: 基于资料中的项目, 实现以下功能
- 新增用户
- 根据id查询用户
- 根据id更新用户
- 根据id批量查询用户
- 根据id删除用户
准备工作
- 打开工程: mp-demo
- 修改配置: 修改数据库的连接信息
- 建库建表: 执行资料中的sql
使用MP的步骤
- 引入依赖
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.3.1</version></dependency>
- MyBatisPlus官方提供了starter, 其中集成了MyBatis和MyBatisPlus的所有功能, 并且实现了自动装配效果
- 因此, 我们可以用MyBatisPlus的starter代替Mybatis的的starter
- 继承接口
public interface UserMapper extends BaseMapper<User> {
}
- 自定义的Mapper继承MyBatisPlus提供的BaseMapper接口
- 自定义的Mapper中看似什么代码都没有, 但是已经继承了强大的CRUD方法
- 注意要把数据表对应的实体类作为泛型传递给BaseMapper接口, 这样MP才知道CRUD要操作哪个实体
- 直接调用继承的增删改查的方法
@SpringBootTest
class UserMapperTest {@Autowiredprivate UserMapper userMapper;@Testvoid testInsert() {User user = new User();user.setId(5L);user.setUsername("Lucy");user.setPassword("123");user.setPhone("18688990011");user.setBalance(200);user.setInfo("{\"age\": 24, \"intro\": \"英文老师\", \"gender\": \"female\"}");user.setCreateTime(LocalDateTime.now());user.setUpdateTime(LocalDateTime.now());userMapper.insert(user);}@Testvoid testSelectById() {User user = userMapper.selectById(5L);System.out.println("user = " + user);}@Testvoid testQueryByIds() {List<User> users = userMapper.selectBatchIds(List.of(1L, 2L, 3L, 4L));users.forEach(System.out::println);}@Testvoid testUpdateById() {User user = new User();user.setId(5L);user.setBalance(20000);userMapper.updateById(user);}@Testvoid testDeleteUser() {userMapper.deleteById(5L);}}
原理
MyBatis-Plus是通过扫描实体类, 并基于反射获取实体类信息作为数据库表信息, 生成CRUD方法
符合以下约定, MyBatisPlus就可以正确的获取到数据库表的信息, 然后进行增删改查操作
- 类名驼峰转下划线作为表名, 例如 类名 tbUser -> 表名 tb_user
- 名为id的字段作为主键, 如果没有id字段运行会报错
- 变量名驼峰转下划线作为表的字段名
常用注解
大多数情况下, 数据表的设计和实体类是符合MyBatisPlus开发约定的, 特殊情况下需要通过注解解决特定问题
指定表名: 数据表与实体类的名称不一致时, 通过@TableName注解, 指定表名
@Data
@TableName(value = "tb_user")
public class User {... ...
}
指定主键: 数据表中主键名不是id时, MP运行就会报错, 需要通过@TableId注解, 指定表中的主键字段
@Data
public class User {/*** 用户id*/@TableId(value="id", type=IdType.AUTO)private Long idNumber;}
- 参数说明:
- value用来指定主键字段名
- type用来指定主键类型
- IdType枚举:
- AUTO: 数据库自增长
- INPUT: 通过set方法自行输入
- ASSIGN_ID: 分配基于雪花算法的ID (默认)
- 如果数据表中指定id是自增长, 那么使用MP时, 一定要给id字段设置类型为AUTO, 因为默认是雪花算法
指定字段: 当实体类的变量名存在特殊情况时, 使用@TableField注解, 处理表中的字段
@Data
public class User {//用户名//1.成员变量名与数据库字段名不一致@TableField("username")private String name;//状态(1正常 2冻结)//2.成员变量名以 is 开头, 且是布尔值//如果变量以is开头且是布尔值, MP编译时会去掉is, 造成变量名与字段名不一致,所以需要手动处理@TableField("is_status")private Boolean isStatus;//排序//3.成员变量名与数据库关键字冲突@TableField("`order`")private Integer order;//地址//4.成员变量名不是数据库字段@TableField(exist=false)private String address;
}
常用配置
MyBatisPlus的配置项继承了MyBatis原生配置和一些自己的配置, 更多的配置可以去官网查看
- 官网: MyBatis-Plus 🚀 为简化开发而生
- 大多情况下默认的配置就足够用了, 如果有需要再修改配置就可以了
小结
MyBatisPlus使用的基本流程
- 引入起步依赖
- 自定义Mapper继承BaseMapper
- 如果实体类和数据表信息对应关系有问题, 在实体类上添加注解指定表信息
- 在application.yml中根据需要调整或添加配置
相关文章:

[MyBatis-Plus]快速入门
介绍 MyBatis-Plus是MyBatis的好朋友, 与MyBatis配合, 实现开发效率的提高 官网: 特点: 润物细无声: 只做增强不做改变, 引入它不会对现有工程产生影响, 如丝般顺滑效率自上: 只需简单配置, 即可快速进行单表CRUD, 从而节省大量时间功能丰富: 代码生产, 自动分页, 逻辑删除, …...

单例模式和读者写者问题
文章目录 10. 线程安全的单例模式10.1 什么是设计模式10.2 什么是单例模式10.3 单例模式的特点10.4 饿汉方式和懒汉方式10.5 单例模式的线程池 11. STL和智能指针的线程安全 问题11.1 STL中的容器是否是线程安全的?11.2 智能指针是否是线程安全的? 12. 其他常见的各种锁13. 读…...

内网wordpress更换IP后无法访问的解决办法
一、现象 一台装有wordpress的台式机,从一个校区移到了另一个校区,更换了IP地址,导致无法正常访问。 二、分析 安装wordpress的时候里面的ip(或域名)都已固定。安装好后,内网通过IP访问&am…...

Spring Boot课程答疑:技术难题一网打尽
4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式,是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示: 图4-1系统工作原理…...

云卷云舒【超级数据库】:算力网络时代的云原生数据库
一直关注算力网络,再次分析下移动云的数据库团队,他们在做的一些事情其实比较务实,在推进数据库依托云原生演进到算力网络阶段,这都是在构建一个能够承载无限容量、无感接入、多模融合、智能调度的超级数据库。 未来数据库&#…...

电脑分盘分盘
方案一:使用磁盘管理工具扩展卷功能将未分配磁盘合并到C盘 按WinR输入diskmgmt.msc并按Enter键打开磁盘管理工具。在主界面中右键单击C盘驱动器并选择“扩展卷”,然后按照提示流程操作即可扩展C盘空间。 WinR diskmgmt.msc 注意:虽然系统内置…...
四元数基础知识
背景 四元数是方向的 4 元组表示形式,它比旋转矩阵更简洁。 四元数对于分析涉及三维旋转的情况非常有效。 四元数广泛用于机器人技术、量子力学、计算机视觉和 3D 动画。 您可以在 Wikipedia 上了解有关基本数学概念的更多信息。 您还可以观看由 3blue1brown 制…...

『网络游戏』进入游戏主城UI跳转主城【26】
首先在Unity客户端中创建一个空节点重命名为MainCityWnd 设置父物体为全局 创建空节点钉在左上角作为角色信息UI 在钉子下创建Image 创建脚本:MainCityWnd.cs 编写脚本:MainCityWnd.cs 挂载脚本 创建脚本:MainCitySys.cs 编写脚本:…...

多点低压差分(M-LVDS)线路驱动器和接收器——MS2111
MS2111 是多点低压差分 (M-LVDS) 线路驱动器和接收器。经过 优化,可运行在高达 200Mbps 的信号速率下。所有部件均符合 M LVDS 标准 TIA / EIA-899 。该驱动器的输出支持负载低至 30Ω 的多 点总线。 MS2111 的接收器属于 Type-2 , 可在 -1…...
regexp_split_to_table的作用
regexp_split_to_table 是 PostgreSQL 中的一个函数,用于将一个字符串根据正则表达式进行分割,并将结果返回为一个表格(每个分割后的部分作为一行)。这个函数非常有用,特别是在处理复杂字符串时。 语法 regexp_split…...

【MATLAB】基于RSSI的蓝牙定位程序,4个锚点、二维平面
目录 编辑 商品描述 主要功能 技术细节 适用场景 下载链接 商品描述 这款基于接收信号强度指示(RSSI)原理的蓝牙定位程序,专为需要高效、可靠定位解决方案的开发者和研究人员设计。它能够在二维平面内,通过4个锚点实现对未…...
利用 langchain 和 LLM 来给 PDF 做总结
在网上看到一个PDF, 讲的是 Gstreamer 的的动态管道的构建, 一瞥而过, 没时间细看, 先写个小程序通过 langchain 和 LLM 给它做个快速总结 代码如下 from langchain.document_loaders import UnstructuredPDFLoader from langchain.llms import OpenAI from langchain.chains i…...
props 不能轻易解构,注意maxLength类似这种,不能解构出来
当您从 props 对象中解构 msg 时,msg 变量将会获取到当时的 props.msg 值。解构操作仅仅是将当前值复制到 msg 变量中,它并不会建立响应式连接。因此,当 props.msg 发生变化时,解构出的 msg 变量仍保持其原始值,不会自…...
总结拓展十三:SAP系统采购订单关闭实例分享
1、案例分享 我们集团A基地和B基地存在外包加工业务。A基地向B基地外包采购了多起不同类型的物料,近期有部分外包采购暂停,需要采购关闭未完成交货的采购订单。采购在关闭时出现2类报错问题,向我们IT咨询解决方案。 1)报错类型 …...

内嵌服务器Netty Http Server
内嵌式服务器不需要我们单独部署,列如SpringBoot默认内嵌服务器Tomcat,它运行在服务内部。使用Netty 编写一个 Http 服务器的程序,类似SpringMvc处理http请求那样。举例:xxl-job项目的核心包没有SpringMvc的Controller层,客户端却…...
Maven打包运行,引入三方jar及打包,不导入本地库的方法
Maven打包运行,引入三方jar及打包,不导入本地库的方法 maven、打包、springboot、jar、本地、引入背景 业务系统要对接某硬件,需要用到其三方jar,maven官方仓库没有这个,我也没有maven,又不想mvn install…...

02复写零
复写零 我们先进行异地复写:代码如下 public class Test {public static void main(String[] args) {int []array {1,0,2,3,0,4};duplicateZeros(array);}public static void duplicateZeros(int[] arr) {int [] elemnew int[arr.length];for(int cur0,dest0;des…...
01-gcc编译c++过程
当然,可以为您简要概述GCC编译C程序的各个步骤及其对应的具体命令。 GCC编译C的四个主要步骤 预处理(Preprocessing)编译(Compilation)汇编(Assembly)链接(Linking) 1…...

互动式教育技术:Spring Boot师生共评作业管理系统
3系统分析 3.1可行性分析 通过对本师生共评的作业管理系统实行的目的初步调查和分析,提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本师生共评的作业管理系统采用JAVA作为开发语言&…...

【云从】三、计算机网络基础
文章目录 1、网络2、网络通信2.1 IP地址2.2 子网掩码2.3 网关2.4 私有地址和公有地址2.5 NAT网络地址转换 3、网络架构及设备 1、网络 网络,即通过通信线路(如光纤、网线)和通信设备(如路由器、光猫),将各…...

业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...
应用升级/灾备测试时使用guarantee 闪回点迅速回退
1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...
Spring Boot 实现流式响应(兼容 2.7.x)
在实际开发中,我们可能会遇到一些流式数据处理的场景,比如接收来自上游接口的 Server-Sent Events(SSE) 或 流式 JSON 内容,并将其原样中转给前端页面或客户端。这种情况下,传统的 RestTemplate 缓存机制会…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...