【mybatis-plus】学习笔记

2023-11-09

官方地址:https://mp.baomidou.com/
自动化工具:JPA、tk-imapper、MybatisPlus

简介

MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

愿景

我们的愿景是成为 MyBatis 最好的搭档,就像 魂斗罗 中的 1P、2P,基友搭配,效率翻倍。

在这里插入图片描述

特性

  • 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
  • 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
  • 强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
  • 支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错
  • 支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题
  • 支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作
  • 支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )
  • 内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用
  • 内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询
  • 分页插件支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多种数据库
  • 内置性能分析插件:可输出 Sql 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询
  • 内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作

支持数据库

  • mysql 、 mariadb 、 oracle 、 db2 、 h2 、 hsql 、 sqlite 、 postgresql 、 sqlserver
  • 达梦数据库 、 虚谷数据库 、 人大金仓数据库

快速指南

1、创建数据库 mybatis_plus

在这里插入图片描述
其对应的数据库 Schema 脚本如下:

DROP TABLE IF EXISTS user;

CREATE TABLE user
(
	id BIGINT(20) NOT NULL COMMENT '主键ID',
	name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
	age INT(11) NULL DEFAULT NULL COMMENT '年龄',
	email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',
	PRIMARY KEY (id)
);

其对应的数据库 Data 脚本如下:

INSERT INTO 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、导入相应的依赖

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.0</version>
        </dependency>

说明:我们使用mybatis-plus可以节省我们大量的代码,尽量不要同时导入mybatis和mybatis-plus! 版本的差异!

3、连接数据库

spring.datasource.username=root
spring.datasource.password=root
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis_plus?\
  useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC
spring.datasource.driver-class-name=com.mysql.jdbc.Driver


mysql 8 驱动 : com.mysql.cj.jdbc.Driver

4、编写代码

使用mybatis-plus之后,无需配置mapper.xml文件


编写实体类 User.java(此处使用了 Lombok 简化代码)

package com.wei.mybatis_plus.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor

public class User {
    private Long id ;
    private String name;
    private Integer age;
    private String email;
}

编写Mapper类 UserMapper.java

//在对应的Mapper上继承基本的类baseMapper
@Repository
public interface UserMapper extends BaseMapper<User> {
    //继承basemapper并传递pojo类型
    //所有的CRUD已经编写完成
    //不需要像以前的配置一些xml
}

  • 在 Spring Boot 启动类中添加 @MapperScan 注解,扫描 Mapper 文件夹:
// 扫描mapper 文件夹
@MapperScan("com.wei.mybatis_plus.mapper")
@SpringBootApplication
public class MybatisPlusApplication {
    public static void main(String[] args) {
        SpringApplication.run(MybatisPlusApplication.class, args);
    }
}

进行测试


@SpringBootTest
class MybatisPlusApplicationTests {
    @Autowired
    private UserMapper userMapper;
    @Test
    void contextLoads() {
        List<User> users = userMapper.selectList(null);
        System.out.println(users);
    }
}

UserMapper 中的 selectList() 方法的参数为 MP 内置的条件封装器 Wrapper,所以不填写就是无任何条件

控制台输出:
在这里插入图片描述

5、小结

通过以上几个简单的步骤,我们就实现了 User 表的 CRUD 功能,甚至连 XML 文件都不用编写!

从以上步骤中,我们可以看到集成MyBatis-Plus非常的简单,只需要引入 starter 工程,并配置 mapper 扫描路径即可。

但 MyBatis-Plus 的强大远不止这些功能,想要详细了解 MyBatis-Plus 的强大功能?那就继续往下看吧!

2.配置日志

我们所有的sql是不可见的,我们希望知道他是怎么执行的,所以我们必须看日志!

# 配置日志  (默认控制台输出)
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

配置之后,日志信息会在控制台打印 。除此之外还有其他的日志实现。


3.CRUD扩展

1.插入数据

    @Test
    void contextLoads2() {
        int ww = userMapper.insert(new User(null, "ww2", 23, "2651@qq.com"));
        System.out.println(ww);
    }

注意点:数据库插入的id默认值为:全局的唯一id\

2.主键生成策略

默认 ID_WORKER 全局唯一id
对应数据库中的主键(uuid.自增id.雪花算法.redis.zookeeper)

分布式系统唯一id生成:https://www.cnblogs.com/haoxinyue/p/5208136.html

雪花算法

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【mybatis-plus】学习笔记 的相关文章

  • CloudCompare二次开发(1)——获取指定高程的所有点

    目录 一 源码编译 二 制作流程 三 结果展示 本文由CSDN点云侠原创 原文链接 爬虫网站自重 一 源码编译 1 WIN10系统下VS2019编译CloudCompare2 12 4 二 制作流程 1 找到源码中的插件例子 主要支持三种插
  • 【python总结】python学习框架梳理

    目录 基础 注释与变量名等基本规则 关键字 操作符 数字 流程控制 序列 文本序列 字符串 二进制序列 字节 列表 元组 映射 字典 集合 函数 面向对象编程 错误和异常 模块 数据结构与算法 数组 字符串 链表 二分查找 排序 栈 队列
  • 线段树Segment tree(1):单点修改,区间查询

    问题描述 给定数列a 1 a 2 a N 依次进行Q次操作 操作有两类 1 i x 给定i x 将a i 加上x 2 l r 给定i x 求 i l r
  • IDEA工具快捷键---补全返回值

    Ctrl alt v 自动提示
  • 树莓派安装卸载软件命令apt-get

    apt get命令用法 1 安装软件 apt get install 软件名 2 卸载软件但不删除配置 apt get remove 软件名 3 卸载软件并且删除相关配置 apt get purge 软件名 4 更新数据库 apt get
  • 微信小程序退出重新进入时跳转特定页面

    微信小程序退出时会记录当前页面的状态 短时间内再次进入会显示退出前的状态 解决方案 在app js文件中添加onHide方法 onHide方法监听小程序切后台 在app js文件中使用会在每次程序退出时调用 onLaunch functio
  • 线性代数-方阵对角化及其应用

    前置知识 1 向量的内积 对于 a x 1
  • 【Git CMD】Git常用命令总结

    目录 0 git的工作区 暂存区 本地仓库和远程仓库 0 1 图解 0 2 解析 1 本地仓库 1 1 创建版本库 1 2 分支 1 2 1 查看本地仓库的分支信息 1 2 2 创建分支 1 2 3 切换分支 1 2 4 重命名分支 1 2
  • : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server versi

    出现这种报错的原因一定是sql语句写错了 报错 分析 解决方案 在这种报错的情况下 1 看字段是否写错 2 是否多逗号或者少写逗号 3 sql语句本身语法有没有错误
  • 基于SpringBoot的高校党务管理系统

    系列文章目录 基于PHP的旅游管理系统 基于SSM的毕业设计管理系统 基于SpringBoot的高校在线答疑管理系统 目录 系列文章目录 一 相关技术 二 系统功能 三 系统页面 1 管理员功能页面 2 学生功能页面 3 党组织功能页面 4
  • YOLOv4 tensorrt推理 python版【附代码】

    学了几天的tensorRT 又经过了几天的努力终于实现了YOLOv4 tensorRT推理 这篇文章将把这些成果开源出来 供大家免费使用 YOLOv4代码我采用的是b站up主Bubbliiiing 相信大家应该都比较熟悉这位大佬 关于trt
  • 计算机网络体系结构 - 运输层

    一 运输层协议概述 运输层为应用进程之间提供端到端的逻辑通信 二 运输层的端口 端口 port 也称为协议端口号 protocol port number 对上层的应用进程进行标识 端口用一个16位端口号进行标志 端口号只具有本地意义 端口
  • 5V转±12V无变压器双boost电路

    最近有个新项目 需要 10V范围的模拟量输出 非隔离 对于5V以下供电的控制板而言单端输出绝对没问题 可现在需要有正负输出 是少不了正负电源的 因此准备设计一个5V转 12V的电源 然后选择一个双向供电的运放 来实现单端模拟量信号向双向模拟
  • FPGA硬件工程师Verilog面试题(基础篇二)

    作者简介 大家好我是 嵌入式基地 是一名嵌入式工程师 希望一起努力 一起进步 个人主页 嵌入式基地 系列专栏 FPGA Verilog 习题专栏 微信公众号 嵌入式基地 FPGA硬件工程师Verilog面试题 二 习题一 多功能数据处理器
  • kafka的安装和使用

    ZooKeeper简介 ZooKeeper 是一个为分布式应用所设计的分布的 开源的 java 协调服务 分布式的应用可以建立在同步配置管理 选举 分布式锁 分组和命名等服务的更高级别的实现的基础之上 ZooKeeper 意欲设计一个易于编
  • 各种源码下载地址(目前只有ffmpeg和nginx,libcurl,RapidJSON 文档)

    各种源码下载地址 目前只有ffmpeg和nginx libcurl RapidJSON 文档 ffmpeg源码下载地址 http ffmpeg org download html releases nginx源码下载地址 http hg n
  • java项目抠图功能实现

    java项目抠图功能 项目中需要一个上传文字签名并且抠掉背景图的功能 当初第一次听到这个需求时 差点惊掉下巴 我压根都不会觉得java里能实现这功能 但是既然客户需要 那就照办吧 经过这次功能的实现 我也更加坚定了一个想法 再奇葩的需求 也
  • 斑马面试总结

    面试岗位 测试开发实习生 面试主要提问的是简历上的项目经历 测试相关的 给你一个视频软件 怎么测试 功能测试 黑盒测试 视频的封面正常 点击屏幕或播放键可以正常播放 视频时间倒计时显示正常 再次点击暂停 视频的声音 默认打开 无噪音 可以调
  • 运行游戏找不到x3daudio1_7.dll怎么解决?教你如何快速修复的教程

    在计算机使用过程中 我们经常会遇到一些错误提示 其中之一就是 x3daudio1 7 dll丢失 这个错误提示可能让我们感到困惑和烦恼 但是不用担心 本文将为您介绍x3daudio1 7 dll丢失的原因以及五种修复方法 帮助您解决这个问题
  • 【已解决】vs2015下QtnetWork No Such File or Directory报错

    源于笔者在做qt工具时 遇到的一个问题 问题很直观 加载第三方文件时 第三方文件调用了 include

随机推荐

  • JMeter入门教程(13) --事务

    文章目录 1 任务背景 2 任务目标 3 任务实操 3 1 1 事务控制器 3 2 2循环控制器 1 任务背景 JMeter中的事务是通过事务控制器实现的 为了衡量服务器对某一个或一系列操作处理的响应时间 需要定义事务 下面我们详细介绍在J
  • 15-Linux_安装gcc,g++及编译

    安装gcc g 及编译 1 gcc g 安装 2 编译链接的四步 1 预编译 2 编译 3 汇编 4 链接 3 编译链接的过程 4 各个阶段所作的事情 1 预编译阶段 2 编译阶段 3 汇编阶段 4 链接阶段 5 关于执行 6 关于一步执行
  • springcloud-gateway集成knife4j(swagger3)

    springcloud gateway集成knife4j swagger3 springcloud gateway集成knife4j swagger3 环境信息 准备工作 微服务集成knife4j 第一步 编写Knife4jApiInfoP
  • VUE element ui 动态合并单元格问题

    VUE element ui 动态合并单元格问题 1 基础方法 最开始从网上找到了一个基本的可以同时兼顾行和列的方法 时间太久忘记出自哪里了 如下 效果 绑定 span method arraySpanMethod
  • Java GUI 学习笔记(基础)

    Java GUI体系继承图附上 常用的窗体有 JFrame 和 JDialog JFrame JFrame 是一个 swing 容器 即是各个组件的载体 构造方法 1 JFrame 创建一个无标题的窗口 2 Frame String s 创
  • C51延时函数delay的编写

    例如 要写一个延迟10ms的delay函数 12M晶振 void delay 10ms unsigned char i j k for i 5 i gt 0 i for j 4 j gt 0 j for k 248 j gt 0 j 原理
  • CloudCompare——点云绕任意点旋转

    目录 一 绕点旋转 1 功能概述 2 软件实现 3 相关代码 一 绕点旋转 1 功能概述 Pick rotation center 功能可以实现点云绕任意指定点进行旋转 2 软件实现 3 相关代码 1 PCL 点云绕任意点旋转
  • 一文理解推挽输出&漏极开路输出(OD)&集电极开路输出(OC)

    因为自己之前一直不理解推挽输出 漏极开路输出 集电极开路输出这三个概念到底是什么意思 今天终于静下心来好好学习了一遍 于是便写下本文详细解释一下这三个概念 希望能对你有所帮助 文中大部分内容均为引用 要理解推挽输出 首先要理解好三极管 晶体
  • Android studio 查看文件svn/本地历史

    在AS中打开目标文件 而后选中右键本地历史 Local History gt Show History svn历史 Subversion gt Show History
  • 开源资产管理系统

    真正的大师 永远都怀着一颗学徒的心 一 项目简介 今天给大家推荐一个开源的资产管理系统 对于一个公司而言 对资产的记录是一件很重要的事情 短时间你可能知道一个电脑 一个打印机放在什么地方 但是随着时间的推移 对于一个公司老人来说你都很难找到
  • 用node.js 实现一个简单的接口

    使用 Node js 可以方便地创建简单的接口 下面是一个使用 Node js 和 Express 框架创建简单接口的示例 首先 确保已经安装了 Node js 和 npm Node js 包管理器 1 创建一个新的文件夹 并在文件夹中打开
  • 华为od机试 C++ 地址分割

    题目 你的任务是编写一个程序 该程序将接收一个由逗号分隔的字符串 其中包含一个URL的前缀和后缀 然后将它们合并成一个完整的URL 合并规则如下 如果前缀的最后一个字符是斜杠 则删除它 如果后缀的第一个字符是斜杠 则删除它 在处理过的前缀和
  • 很诡异的问题——Jenkins与svn代码冲突之解决方法

    今天遇到一个很诡异的问题 可能是我刚刚接触jenkins的原因 导致这个问题困扰了我半个小时 不管怎么样 我还是记录下来 希望能帮助到那些和我一样刚刚接触jenkins的小伙伴 我从idea修改了两个配置文件 提交到svn 然后jenkin
  • mac上安装brew(最简易)

    我们使用linux下有yum mac相应的是brew 安装软件 brew的安装目录在 usr local Cellar 我们以安装nodejs为例子 只需要执行 brew install nodejs 就安装完了 就这么简单 接下来我们安装
  • java开源 VR全景商城 saas商城 b2b2c商城 o2o商城 积分商城 秒杀商城 拼团商城 分销商城 短视频商城 小程序商城搭建

    1 涉及平台 平台管理 商家端 PC端 手机端 买家平台 H5 公众号 小程序 APP端 IOS Android 微服务平台 业务服务 2 核心架构 Spring Cloud Spring Boot Mybatis Redis 3 前端框架
  • M1 电脑使用nvm 管理node

    1 执行下面的代码创建文件 bash profile touch bash profile 2 下载安装 curl o https raw githubusercontent com nvm sh nvm v0 35 2 install s
  • 从零开始的Docker详解(六)

    Docker仓库 docker仓库是集中存放镜像的地方 类似maven的仓库集中存放依赖 Docker Hub Docker Hub是由Docker官方维护的公共仓库 包含官方镜像和个人上传的镜像 大部分镜像都可以在上面找到 注 非官方的镜
  • CentOS7.3 安装

    选择Install CentOS Linux 7 选择语言 点击软件选择 选择基本环境 点击安装位置 选择我要配置分区 点击完成 根据需要选择分区方案 点击 根据需要添加挂载点 添加完所有挂载点后点击完成 在弹出的页面中选择接受更改 点击开
  • java基础知识点

    java中有四大修饰符 分别为private default protected public 下面主要是四者之间的区别 private 私有的 private可以修饰成员变量 成员方法 构造方法 不能修饰类 此刻指的是外部类 内部类不加以
  • 【mybatis-plus】学习笔记

    官方地址 https mp baomidou com 自动化工具 JPA tk imapper MybatisPlus 简介 MyBatis Plus 简称 MP 是一个 MyBatis 的增强工具 在 MyBatis 的基础上只做增强不做