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

MybatisPlus从入门到精通

一、MyBatis-Plus核心特性

  1. 无侵入性
    在MyBatis基础上增强,无需修改原有代码即可使用。
  2. 自动化CRUD
    内置通用Mapper和Service,减少80%单表操作代码。
  3. Lambda表达式
    支持Lambda形式的条件构造,避免字段名硬编码错误。
  4. 主键策略
    支持雪花算法(ASSIGN_ID)、UUID(ASSIGN_UUID)、自增(AUTO)等主键生成方式。

二、快速入门案例

1. 数据库准备

DROP TABLE IF EXISTS sys_user;CREATE TABLE sys_user
(id BIGINT NOT NULL COMMENT '主键ID',name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',age INT NULL DEFAULT NULL COMMENT '年龄',email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',PRIMARY KEY (id)
);
DELETE FROM sys_user;INSERT INTO sys_user (id, name, age, email) VALUES
(1, 'Jone', 18, 'test1@baomidou.com'),
(2, 'Jack', 20, 'test2@baomidou.com'),
(3, 'Tom', 28, 'test3@baomidou.com'),
(4, 'Sandy', 21, 'test4@baomidou.com'),
(5, 'Billie', 24, 'test5@baomidou.com');

2. Spring Boot配置

pom.xml依赖

<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-annotation</artifactId><version>3.5.3.1</version></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-core</artifactId><version>3.5.3.1</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>3.0.3</version></dependency>

application.yml

spring:datasource:url: jdbc:mysql://localhost:3306/mybatis_plus?serverTimezone=GMT%2B8username: rootpassword: root

3. 实体类与Mapper

package com.awei.mybatismodel.entity;import lombok.Data;@Data
public class SysUser {private Long id;private String name;private Integer age;private String email;
}
package com.awei.mybatismodel.mapper;import com.awei.mybatismodel.entity.SysUser;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;public interface SysUserMapper extends BaseMapper<SysUser> {}

4.启动类

package com.awei.mybatismodel;import org.springframework.boot.SpringApplication;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
@MapperScan("com.awei.mybatismodel.mapper")
public class MybatisModelApplication {public static void main(String[] args) {SpringApplication.run(MybatisModelApplication.class, args);}}

5.测试

package com.awei.mybatismodel;import com.awei.mybatismodel.entity.SysUser;
import com.awei.mybatismodel.mapper.SysUserMapper;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import java.util.List;@SpringBootTest
public class QuickStartTest {@Autowiredprivate SysUserMapper userMapper;@Testpublic void testSelect() {System.out.println(("----- selectAll method test ------"));List<SysUser> userList = userMapper.selectList(null);Assertions.assertEquals(5, userList.size());userList.forEach(System.out::println);}
}

在这里插入图片描述

三、核心注解详解

注解作用示例
@TableName指定实体类对应的表名@TableName("sys_user")
@TableId标识主键字段@TableId(type = IdType.AUTO)
@TableField字段与列映射/自动填充策略@TableField(value = "email", fill = FieldFill.INSERT_UPDATE)

主键策略示例

public enum IdType {AUTO,        // 数据库自增ASSIGN_ID,   // 雪花算法(默认)ASSIGN_UUID  // UUID生成
}

四、CRUD操作

1. 基础操作

// 插入
User user = new User();
user.setName("Tom");
userMapper.insert(user);// 查询
User user = userMapper.selectById(1L);// 更新
user.setAge(30);
userMapper.updateById(user);// 删除
userMapper.deleteById(2L);

2. 条件构造器(Wrapper)

LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.like(User::getName, "J")      // 模糊查询.ge(User::getAge, 18)          // 年龄>=18.orderByDesc(User::getCreateTime);List<User> users = userMapper.selectList(wrapper);

生成SQL:

SELECT * FROM user WHERE name LIKE '%J%' AND age >= 18 ORDER BY create_time DESC

五、分页查询

1. 配置分页插件

@Configuration
public class MybatisPlusConfig {@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));return interceptor;}
}

2. 分页查询代码

Page<User> page = new Page<>(1, 10);  // 第1页,每页10条
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(User::getAge, 20);IPage<User> userPage = userMapper.selectPage(page, wrapper);
System.out.println("总记录数:" + userPage.getTotal());

六、高级功能

1. 逻辑删除

表字段

ALTER TABLE user ADD is_deleted TINYINT(1) DEFAULT 0 COMMENT '逻辑删除标记';

配置

mybatis-plus:global-config:db-config:logic-delete-field: isDeleted  # 逻辑删除字段名logic-delete-value: 1          # 删除标记值logic-not-delete-value: 0      # 未删除标记值

2. 自动填充

public class MetaObjectHandler implements MetaObjectHandler {@Overridepublic void insertFill(MetaObject metaObject) {this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now());}
}

更新中----

相关文章:

MybatisPlus从入门到精通

一、MyBatis-Plus核心特性 无侵入性 在MyBatis基础上增强&#xff0c;无需修改原有代码即可使用。自动化CRUD 内置通用Mapper和Service&#xff0c;减少80%单表操作代码。Lambda表达式 支持Lambda形式的条件构造&#xff0c;避免字段名硬编码错误。主键策略 支持雪花算法&…...

el-table input textarea 文本域 自适应高度,切换分页滚动失效处理办法

场景&#xff1a; el-table 表格 需要 input类型是 textarea 高度是自适应&#xff0c;第一页数据都是单行数据 不会产生滚动条&#xff0c;但是第二页数据是多行数据 会产生滚动条&#xff0c; bug: 第一页切换到第二页 第二页滚动条无法展示 解决办法&#xff1a;直接修改样…...

基于Windows11的DockerDesktop安装和布署方法简介

基于Windows11的DockerDesktop安装和布署方法简介 一、下载安装Docker docker 下载地址 https://www.docker.com/ Download Docker Desktop 选择Download for Winodws AMD64下载Docker Desktop Installer.exe 双点击 Docker Desktop Installer.exe 进行安装 测试Docker安装是…...

ffmpeg源码编译支持cuda

1.安装cuda CUDA Toolkit 11.3 Downloads | NVIDIA Developer 在选择组件的时候&#xff0c;将CUDA中的Nsight VSE和Visual Studio Integration取消勾选 不然会安装失败 2.编译ffmpeg 把cuda编译宏定义开启&#xff0c;再编译avcodec 3.编译livavutil报错struct "Cuda…...

动漫短剧开发公司,短剧小程序搭建快速上线

在当今快节奏的生活里&#xff0c;人们的娱乐方式愈发多元&#xff0c;而动漫短剧作为新兴娱乐形式&#xff0c;正以独特魅力迅速崛起&#xff0c;成为娱乐市场的耀眼新星。近年来&#xff0c;动漫短剧市场呈爆发式增长&#xff0c;吸引众多创作者与观众目光。 从市场规模来看…...

《2025软件测试工程师面试》接口测试篇

基础概念 什么是接口测试? 接口测试是测试系统组件间接口的一种测试,主要用于检测外部系统和内部系统之间以及各个子系统之间的交互点。测试的重点是检查数据的交换、传递和控制管理的过程,以及系统间的相互逻辑依赖关系等。 接口测试的优势是什么? 接口测试具有规范性与扩…...

嵌入式学习第二十三天--网络及TCP

进程通信的方式: 同一主机 传统 system V 不同主机 网络 --- 解决不同主机间 的进程间通信 网络 (通信) //1.物理层面 --- 联通(通路) //卫星 2G 3G 4G 5G 星链 (千帆) //2.逻辑层面 --- 通路(软件) MAC os LINUX …...

Elasticsearch:解锁深度匹配,运用Elasticsearch DSL构建闪电般的高效模糊搜索体验

目录 Elasticsearch查询分类 叶子查询 全文检索查询 match查询 multi_match查询 精确查询 term查询 range查询 复杂查询 bool查询简单应用 bool查询实现排序和分页 bool查询实现高亮 场景分析 问题思考 解决方案 search_after方案(推荐) point in time方案 方案…...

SQLAlchemy系列教程:基本数据类型及自定义类型

在SQLAlchemy、Python SQL工具包和ORM中定义模型时&#xff0c;理解基本数据类型至关重要。本教程提供了在SQLAlchemy模型中有效使用内置基本类型的指南。 SQLAlchemy中的基本类型 SQLAlchemy支持一组与SQL数据库类型一致的基本数据类型。SQLAlchemy中的每种类型都为各种SQL类…...

【Wireshark 02】抓包过滤方法

一、官方教程 Wireshark 官网文档 &#xff1a; Wireshark User’s Guide 二、显示过滤器 2.1、 “数据包列表”窗格的弹出过滤菜单 例如&#xff0c;源ip地址作为过滤选项&#xff0c;右击源ip->prepare as filter-> 选中 点击选中完&#xff0c;显示过滤器&#…...

ES怎么查询大于10000条数据

在Elasticsearch&#xff08;ES&#xff09;中&#xff0c;默认情况下&#xff0c;查询结果的最大返回条数是10,000条。如果你需要查询超过10,000条数据&#xff0c;可以通过以下几种方式来实现&#xff1a; 1. 使用 scroll API scroll API 适用于需要处理大量数据的场景&…...

《几何原本》命题I.8

《几何原本》命题I.8 如果两个三角形有三边对应相等&#xff0c;那么这两个三角形的所有对应角亦相等。 若 A B D E , A C D F , B C E F ABDE,ACDF,BCEF ABDE,ACDF,BCEF 将 △ A B C \triangle ABC △ABC 平移至 △ D E F \triangle DEF △DEF&#xff0c;使 B C BC …...

课程2. 机器学习方法论

课程2. 机器学习方法论 训练算法并评估其质量将样本分成训练和测试。分层 交叉验证方法sklearn 接口算法模型训练模型的应用质量评估 数据预处理标准缩放Violinplot 数据集使用模型Pipeline 在上一讲中&#xff0c;我们讨论了机器学习专家面临的挑战。无论解决的问题类型和解决…...

ioday2----->标准io函数

思维导图&#xff1a; 练习&#xff1a; 1将当前的时间写入到time. txt的文件中&#xff0c;如果ctrlc退出之后&#xff0c;在再次执行支持断点续写 1.2022-04-26 19:10:20 2.2022-04-26 19:10:21 3.2022-04-26 19:10:22 //按下ctrlc停止&#xff0c;再次执行程序 4.2022…...

SQL注入练习场:PHPStudy+SQLI-LABS靶场搭建教程(零基础友好版)

注意&#xff1a;文中涉及演示均为模拟测试&#xff0c;切勿用于真实环境&#xff0c;任何未授权测试都是违法行为&#xff01; 一、环境准备 下载PHPStudy 官网下载地址&#xff1a;https://www.xp.cn/php-study&#xff08;选择Windows版&#xff09; 安装时建议选择自定…...

【笔记ing】python

1 Python基础概念及环境搭建 1.1 python简介及发展史 之父Guido van Rossum。ABC语言的替代品。Python提供了高效的数据结构&#xff0c;还能简单有效地面向对象编程。Python语法和动态类型&#xff0c;以及解释性语言的本质&#xff0c;使之成为多数平台上写脚本和快速开发应…...

DFT之SSN架构

SSN&#xff08;Streaming Scan Network&#xff09;架构在DFT&#xff08;设计可测试性&#xff09;中的应用是一种先进的设计测试解决方案&#xff0c;旨在应对现代大规模片上系统&#xff08;SoC&#xff09;设计中的复杂测试挑战。以下是对SSN架构在DFT中应用的详细分析&am…...

四十二:VSCODE打开新文件覆盖上一个文件窗口问题

VSCODE打开新文件覆盖上一个文件窗口问题_vscode enablepreview-CSDN博客...

JMeter 引入 JAR 包的几种方法

JMeter 支持加载外部 JAR 文件&#xff0c;用于&#xff1a; 扩展 JMeter 功能使用 Java 代码&#xff08;BeanShell / JSR223&#xff09;连接数据库 / 解析 Excel / 读取 CSV &#x1f4cc; 1. JMeter 引入 JAR 包的方式 ✅ 方式 1&#xff1a;将 JAR 放入 lib/ 或 lib/ext…...

记一次ScopeSentry搭建

介绍 Scope Sentry是一款具有资产测绘、子域名枚举、信息泄露检测、漏洞扫描、目录扫描、子域名接管、爬虫、页面监控功能的工具&#xff0c;通过构建多个节点&#xff0c;自由选择节点运行扫描任务。当出现新漏洞时可以快速排查关注资产是否存在相关组件。 目前功能 插件系…...

自动驾驶汽车三维路径规划与路径跟踪控制方法【附代码】

✨ 长期致力于自动驾驶汽车、三维路径规划、路径跟踪控制、深度强化学习、预瞄跟随、模糊推理、神经网络模型预测控制研究工作&#xff0c;擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流&#xff0c;点击《获取方式》 &#xff0…...

半年飙到 15.7 万 Star!OpenCode:Claude Code 最强开源对手,模型随便挑

&#x1f449; 这是一个或许对你有用的社群&#x1f431; 一对一交流/面试小册/简历优化/求职解惑&#xff0c;欢迎加入「芋道快速开发平台」知识星球。下面是星球提供的部分资料&#xff1a; 《项目实战&#xff08;视频&#xff09;》&#xff1a;从书中学&#xff0c;往事上…...

【码上爬】 题十一:wasm小试牛刀 wasm文件处理,堆栈分析

暗号&#xff1a;aHR0cHM6Ly9tYXNoYW5ncGEuY29tL3Byb2JsZW0tZGV0YWlsLzExLw题目&#xff1a;先分析数据接口&#xff0c;可以看到m和ts是加密的&#xff0c;但是这里的ts的值应该是一个时间戳&#xff0c;所以主要要逆向的值是m&#xff1a;然后在发起程序的最上面的堆栈下一个…...

BIN文件操作指南:从字节视角到实战应用

1. 项目概述&#xff1a;为什么我们需要系统性地掌握BIN文件操作&#xff1f;在嵌入式开发、固件逆向、游戏修改乃至数据恢复这些领域里&#xff0c;我们经常会遇到一个后缀名为.bin的文件。很多新手朋友第一次接触时可能会有点懵&#xff0c;这既不是文本文件可以直接打开看&a…...

告别预编译:手把手教你从源码编译Scrcpy的Android Server端(含Meson配置详解)

从零构建Scrcpy Android Server端&#xff1a;Meson与Gradle深度协作指南 在Android投屏工具Scrcpy的生态中&#xff0c;大多数用户都习惯于直接使用预编译的Server端APK。但当你需要修改投屏协议、优化视频编码参数或添加自定义功能时&#xff0c;从源码完整编译Server端就成为…...

drf-nested-routers测试指南:确保嵌套路由稳定性的完整方案

drf-nested-routers测试指南&#xff1a;确保嵌套路由稳定性的完整方案 【免费下载链接】drf-nested-routers Nested Routers for Django Rest Framework 项目地址: https://gitcode.com/gh_mirrors/dr/drf-nested-routers drf-nested-routers是Django Rest Framework的…...

3种高效方案解析:如何深度还原微信小程序源代码结构

3种高效方案解析&#xff1a;如何深度还原微信小程序源代码结构 【免费下载链接】wxappUnpacker forked from https://github.com/qwerty472123/wxappUnpacker 项目地址: https://gitcode.com/gh_mirrors/wxappu/wxappUnpacker 你是否曾面对一个加密的微信小程序包&…...

Agent Runtime 九个关键设计:状态外化、上下文压缩与多智能体协同

把 Agent 从能跑到可靠&#xff0c;关键不在模型神准&#xff0c;而在状态、上下文和协作工程。 原文链接&#xff1a;AI 小老六 聊 Agent 时&#xff0c;很多讨论容易落到模型能力上&#xff1a;模型会不会推理&#xff0c;代码写得准不准&#xff0c;能不能理解复杂需求。这些…...

计算机视觉:YOLOv12安装环境

YOLOv12安装环境 一、工具软件准备 1、yolov12 1&#xff09;下载yolov12主体部分 推荐官方地址&#xff1a;https://github.com/sunsmarterjie/yolov12 2&#xff09;下载训练模型 地址&#xff1a; https://github.com/sunsmarterjie/yolov12 3&#xff09;安装命令和p…...

告别手动填表!用Python脚本5分钟搞定DSSAT模型批量模拟(附源码)

Python自动化DSSAT模型&#xff1a;从Excel到批量模拟的高效科研实践 在农业科研和气候情景分析中&#xff0c;DSSAT模型作为全球主流的作物生长模拟工具&#xff0c;其价值早已被广泛认可。但真正使用过它的研究者都深有体会&#xff1a;当面对数十种管理方案、上百个气象场景…...