[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、网络 网络,即通过通信线路(如光纤、网线)和通信设备(如路由器、光猫),将各…...

读书笔记《向上生长》关于记忆、链接的一些思考
摘录 NOTES 1.大脑非常低效,记性不好,还会自圆其说。很多成绩不好的学生绝大部分不记笔记,记了也不看。 2.注意力和肌肉一样,存在耗损,也可以通过锻炼来加强。 3. 所有知识必须链接到已经有的知识,到用的时…...

Kubesphere4.1版本创建应用Mysql并实现外网访问
目前Kubesphere4.1版本可查创建应用资料较少,特此记录作为参考。 目标 使用Kubesphere4.1完成Mysql服务部署并实现外网访问。 具体流程如下: 1.创建企业空间 2.创建项目 3.创建应用仓库 4.创建应用(mysql) 5.配置外网访…...

小猿口算跟风版——没想到吧,这也能暴力
前言 “接口也是口,算法也是算”,综合来看就是口算! 看到全网都在炸鱼也忍不住来玩一玩… 参考了大佬的OCR版,试用后发现影响速度的最大卡点并不是识别速度等,而是““由于检测异常导致的等待”。 基于体验几局的感受…...

【RabbitMQ——消息应答机制——分布式事务解决方式】
1. RabbitMQ高级-消息确认机制的配置 NONE值是禁用发布确认模式,是默认值 CORRELATED值是发布消息成功到交换器后会触发回调方法,如1示例SIMPLE值经测试有两种效果,其一效果和CORRELATED值一样会触发回调方法,其二在发布消息成功…...

Android Studio Koala中Kotlin引入序列化Parcelable
找了一堆资料没有新构建序列化的方法,踩坑经历如下: 前提是使用Kotlin创建的项目 之前的build.gradle版本写法如下: 但是新版Android Studio Koala使用序列化模式发生了改变,如下: 测试成功如下: 发出来…...

安装postgresql和对应wal2json和pg_tm_aux插件避坑
1、安装原则:要用源码都用源码,要用yum都用yum 安装wal2json避坑 涉及的yum源,可以解决安装postgresql缺少依赖导致的wal2json和pg_tm_aux的报错问题 [centos-sclo-rh] nameCentOS-7 - SCLo rh baseurlhttps://mirrors.aliyun.com/centos/7/…...

OneDrive 全新时代:AI、生产力和回忆触手可及
OneDrive,无人不知,无人不晓。 无论您是在公司、家庭还是在通勤的路上,OneDrive 都能让您无缝管理文件、照片和回忆。OneDrive 受到 94% 的财富 500 强公司、数百万小型企业和无数个人的信赖,它正在改变世界协作、存储和连接的方…...

List子接口
1.特点:有序,有下标,元素可以重复 2.方法:包含Collection中的所有方法,还包括自己的独有的方法(API中查找) 还有ListIterator(迭代器),功能更强大。 包含更多…...

快来了解 Java 内存数据库 H2,不要错过哦
H2 是一个用 Java 编写的开源关系型数据库管理系统,它具有小巧、快速、易于嵌入等特点。 H2 数据库可以以多种模式运行,包括嵌入式模式、服务器模式和内存模式。 在嵌入式模式下,H2 数据库直接嵌入到应用程序中,就像一个本地的库…...

基于Java的可携宠物酒店管理系统的设计与实现(论文+源码)_kaic
摘 要 随着社会经济的不断发展,现如今出行并住酒店的人越来越多,与之而来的是酒店行业的工作量日益增加,酒店的管理效率亟待提升。此外很多人出门旅游时会有携带宠物的情况,但是现如今酒店对宠物的限制,导致许多…...