Springboot整合Mybatis Plus【超详细】
文章目录
- Mybatis Plus简介
- 快速整合
- 1,导入依赖
- 2,yml文件中配置信息
- 3,启动类上加上扫描mapper接口所在包的注解
- 4,编写配置类
- 5,实现自动注入通用字段接口(非必需)
- 6,编写生成器工具类
- 使用方法API
- 1,新增操作
- 2,修改操作
- 3,查询操作
- 3,1 多条件查询
- 3.2 排序
- 3.3 分组
- 3.4 分页
- 4,删除操作
Mybatis Plus简介
MyBatisPlus是
基于MyaBatis框架基础上开发的增强型工具,旨在简化开发,提高效率。
MyBatis Plus特性:
| 特性 | 说明 |
|---|---|
| 无入侵 | 做增强不做改变,不会对现有工程产生影响 |
| 损耗小 | 启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作 |
| 强大的CRUD操作 | 内置通用Mapper,少量配置即可实现单表CRUD操作 |
| 支持Lambda | 编写查询条件无序担心字段错误 |
| 内置分页插件 | 方便高效 |
| 支持主键自动生成 | 支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置完美解决主键问题 |
| 支持自定义全局通用操作 | 支持全局通用方法注入 |
| 内置性能分析插件 | 可输出 Sql 语句及其执行时间,建议开发测试时启用该功能,能快速定位慢查询 |
快速整合
总结需要做的步骤,不拖拉
1,导入依赖
2,yml文件中配置信息
3,启动类上加上扫描mapper接口所在包的注解
4,编写配置类
5,实现自动注入通用字段接口(非必需)
6,编写Mybatis Plus的controller、service、entity、mapper、xml的生成器工具类
1,导入依赖
<!--mybatis plus--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>${mybatis-plus.version}</version></dependency><!--mybatis plus生成器依赖--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>${mybatis-plus.version}</version></dependency><!--velocity模版依赖--><dependency><groupId>org.apache.velocity</groupId><artifactId>velocity</artifactId><version>${velocity.version}</version><exclusions><exclusion><groupId>commons-collections</groupId><artifactId>commons-collections</artifactId></exclusion></exclusions></dependency>
2,yml文件中配置信息
mybatis-plus:# entity包路径,自行修改typeAliasesPackage: com.tunda.openai.model.entity# enum包路径,自行修改typeEnumsPackage: com.tunda.openai.common.enumsglobal-config:db-config:db-column-underline: true# 逻辑删及设置默认值(deleted字段是数据库自定义字段)logic-delete-field: deletedlogic-not-delete-value: 0logic-delete-value: 1configuration:mapUnderscoreToCamelCase: true# log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl #开启sql日志log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 控制台 打印sqldefault-enum-type-handler: com.baomidou.mybatisplus.extension.handlers.MybatisEnumTypeHandler
3,启动类上加上扫描mapper接口所在包的注解
@SpringBootApplication
@MapperScan(basePackages ="com.tunda.openai.mapper")
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class,args);}
}
4,编写配置类
@Configuration
@EnableTransactionManagement
public class MybatisPlusConfig {@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();PaginationInnerInterceptor pii = new PaginationInnerInterceptor();pii.setDbType(DbType.MYSQL);pii.setMaxLimit(500L);interceptor.addInnerInterceptor(pii);return interceptor;}@Beanpublic ConfigurationCustomizer configurationCustomizer() {return configuration -> configuration.setUseDeprecatedExecutor(false);}
}
5,实现自动注入通用字段接口(非必需)
@Component
public class MybatisMetaObjectHandler implements MetaObjectHandler {@Overridepublic void insertFill(MetaObject metaObject) {insertOrUpdateFill(metaObject, true);}@Overridepublic void updateFill(MetaObject metaObject) {insertOrUpdateFill(metaObject, false);}private void insertOrUpdateFill(MetaObject metaObject, boolean isInsert) {if (isInsert) {if (Objects.isNull(getFieldValByName("createTime",metaObject)))this.setFieldValByName("createTime", LocalDateTime.now(), metaObject);this.setFieldValByName("deleted", 0, metaObject);} else {if (Objects.isNull(getFieldValByName("updateTime",metaObject)))this.setFieldValByName("updateTime", LocalDateTime.now(), metaObject);}}
}
6,编写生成器工具类
具体说明:传送门->https://blog.csdn.net/qq_45399396/article/details/123986811
public class MybatisPlusGenerator {//生成文件所在项目路径private static String baseProjectPath = "D:\\generatorCode";//基本包名private static String basePackage = "com.tunda.openai";//作者(一般公司名简称)private static String authorName = "tunda";//要生成的表名,为空时生成所有表private static String[] tables = {"t_goods_info"};//table前缀private static String prefix = "";//数据库配置四要素private static String driverName = "com.mysql.jdbc.Driver";private static String url = "jdbc:mysql://129.139.254.38:3306/tunsdda_gpt?serverTimezone=GMT%2B8&zeroDateTimeBehavior=CONVERT_TO_NULL&useUnicode=true&characterEncoding=utf-8&useSSL=false";private static String username = "root";private static String password = "root";public static void main(String[] args) {// 代码生成器AutoGenerator mpg = new AutoGenerator();// 1、全局配置GlobalConfig gc = new GlobalConfig();//可以将生成得代码单独放在文件夹里,检查完没问题在手动将包复制到项目中gc.setOutputDir(baseProjectPath);gc.setAuthor(authorName);// 生成实体类的文档注解中作者名gc.setOpen(true);// 生成代码后自动打开生成目录文件gc.setFileOverride(true); // 是否覆盖原来生成的gc.setIdType(IdType.AUTO);// 指定生成的主键类型:自增长gc.setDateType(DateType.ONLY_DATE);gc.setActiveRecord(false);mpg.setGlobalConfig(gc);// 2、数据源配置DataSourceConfig dsc = new DataSourceConfig();dsc.setUrl(url);dsc.setDriverName(driverName);dsc.setUsername(username);dsc.setPassword(password);dsc.setDbType(DbType.MYSQL); // mysql数据库gc.setServiceName("%sService"); //去掉Service接口的首字母'I'dsc.setTypeConvert(new MySqlTypeConvert() {@Overridepublic IColumnType processTypeConvert(GlobalConfig globalConfig, TableField tableField) {return super.processTypeConvert(globalConfig, tableField);}});mpg.setDataSource(dsc);// 3、包配置PackageConfig pc = new PackageConfig();pc.setModuleName(null)// 生成的controller路径映射为一个"/",覆盖默认的"//".setParent(basePackage)// 生成controller,service,xml并设置路径。.setEntity("entity").setMapper("mapper").setService("service").setServiceImpl("service.impl").setController("controller");mpg.setPackageInfo(pc);// 5、策略配置StrategyConfig strategy = new StrategyConfig();strategy.setCapitalMode(true);// 开启全局大写命名strategy.setNaming(NamingStrategy.underline_to_camel);// 实体类名驼峰strategy.setColumnNaming(NamingStrategy.underline_to_camel);// 属性名驼峰strategy.setInclude(tables);// 设置要映射的表名注解@Tablestrategy.setSuperEntityClass(BaseEntity.class); // 预先定义一个BaseEntity类实现Serializable接口strategy.setEntityLombokModel(true); // 使用 lombokstrategy.setRestControllerStyle(true);// 开启 restful风格strategy.setEntityTableFieldAnnotationEnable(false);// 不生成实体类字段swagger类型注解,而是采用文档类型注解:/**xxx*/if (prefix != null) strategy.setTablePrefix(prefix); // 表前缀if (ArrayUtils.isNotEmpty(tables)) strategy.setInclude(tables); // 表名// 6、自动填充配置:非必须(自动加上注解)TableFill createTime = new TableFill("create_time", FieldFill.INSERT);TableFill updateTime = new TableFill("update_time", FieldFill.UPDATE);ArrayList<TableFill> tableFills = new ArrayList<>();tableFills.add(createTime);tableFills.add(updateTime);strategy.setTableFillList(tableFills);strategy.setLogicDeleteFieldName("deleted");// 自动加上逻辑删注解mpg.setStrategy(strategy);mpg.setTemplateEngine(new VelocityTemplateEngine());// 执行生成器mpg.execute();}}
注意事项:生成的代码当中,entiry实体类需要
注意一下@EqualsAndHashCode,生成的时候,@EqualsAndHashCode(callSuper = true)。
但是大多数情况下,@EqualsAndHashCode(callSuper = false) 或者直接去掉这个注解也可以,所以这个的生成器生成的这个注解需要手动修改一下(改为false或者直接去掉这个注解)
到此为止,Springboot整合Mybatis Plus结束,接下来就是注意事项
1,问题一:mybatis-plus中@TableField.fill设置为FieldFill.UPDATE不生效
要想实现自动注入字段属性,必需实现第5步骤,也就是实现MetaObjectHandler接口,
其次,这种不生效的也存在两个注意的场景
场景一:使用原生sql语句,则注入字段属性不生效
场景二:使用update()方法时,需要调用两个参数的重载方法才有效,就这里需要注意一下。
使用方法API
1,新增操作
这里的this表示的是在service的实现类对象

2,修改操作

通过Wappers的Lambda表达式来构造where后面的条件

3,查询操作
Mybatis Plus封装了丰富的查询操作api,尤其是单表操作的API,相比于SpringJPA来说,好处多多。
3,1 多条件查询

.

.

完整的示例如下:

3.2 排序

完整的示例如下:
3.3 分组

完整的示例如下:

3.4 分页


完整的示例如下:

4,删除操作

相关文章:
Springboot整合Mybatis Plus【超详细】
文章目录 Mybatis Plus简介快速整合1,导入依赖2,yml文件中配置信息3,启动类上加上扫描mapper接口所在包的注解4,编写配置类5,实现自动注入通用字段接口(非必需)6,编写生成器工具类 使…...
接口测试-使用mock生产随机数据
在做接口测试的时候,有的接口需要进行大量的数据进行测试,还不能是重复的数据,这个时候就需要随机生产数据进行测试了。这里教导大家使用mock.js生成各种随机数据。 一、什么是mock.js mock.js是用于生成随*机数据,拦截 Ajax 请…...
Kohl‘s百货的EDI需求详解
Kohls是一家美国的连锁百货公司,成立于1962年,总部位于美国威斯康星州的门多西。该公司经营各种商品,包括服装、鞋子、家居用品、电子产品、化妆品等,并拥有超过1,100家门店,分布在美国各地。本文将为大家介绍Kohls的E…...
二叉树part6 | ● 654.最大二叉树 ● 617.合并二叉树 ● 700.二叉搜索树中的搜索 ● 98.验证二叉搜索树
文章目录 654.最大二叉树思路代码 617.合并二叉树思路代码 700.二叉搜索树中的搜索思路代码 98.验证二叉搜索树思路官方题解代码困难 今日收获 654.最大二叉树 思路 前序遍历构造二叉树。 找出数组中最大值,然后递归处理左右子数组。 时间复杂度On2 空间复杂度On …...
Linux命令记录
Shells 查看当前系统shell cat /etc/shells # 输出 # /etc/shells: valid login shells /bin/sh /bin/bash /usr/bin/bash /bin/rbash /usr/bin/rbash /bin/dash /usr/bin/dash查看正在使用的shell echo $SHELL # 输出 /bin/bashLinux文件结构 bin:系统可执行文件b…...
eBPF 入门实践教程十五:使用 USDT 捕获用户态 Java GC 事件耗时
eBPF (扩展的伯克利数据包过滤器) 是一项强大的网络和性能分析工具,被广泛应用在 Linux 内核上。eBPF 使得开发者能够动态地加载、更新和运行用户定义的代码,而无需重启内核或更改内核源代码。这个特性使得 eBPF 能够提供极高的灵活性和性能,…...
Linux :: vim 编辑器的初次体验:三种 vim 常用模式 及 使用:打开编辑、退出保存关闭vim
前言:本篇是 Linux 基本操作篇章的内容! 笔者使用的环境是基于腾讯云服务器:CentOS 7.6 64bit。 学习集: C 入门到入土!!!学习合集Linux 从命令到网络再到内核!学习合集 目录索引&am…...
Linux内核进程创建流程
本文代码基于Linux5.10 内容主要参考《Linux内核深度解析》余华兵 当Linux内核要创建一个新进程时, 流程大致如下 ret fork(); if (ret 0) {/* 子进程装载程序 */ret execve(filename, argv, envp); } else if (ret > 0) {/* 父进程 */ } 大致可以分为创建新…...
【03.04】大数据教程--HTTP协议和静态Web服务器
HTTP协议和静态Web服务器 HTTP(Hypertext Transfer Protocol)是一种用于传输超文本的协议,它是Web上的基础通信协议。静态Web服务器是指能够提供静态内容(如HTML、CSS、JavaScript和图像文件)的服务器。 在本教程中&am…...
数据共享传输:台式机和笔记本同步文件!
为什么要在台式机和笔记本同步文件? “我想在台式机和笔记本同步文件。因为我工作时使用笔记本,在家里使用安装了Windows 10系统的台式机,我想要在笔记本和台式机之间同步应用程序、游戏、文档等。有没有一种可以在台式机和笔记本同步文件的…...
java设计模式(十二)代理模式
目录 定义模式结构角色职责代码实现静态代理动态代理jdk动态代理cglib代理 适用场景优缺点 定义 代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。说简单点,代理模式就是设置一个中间代理来控制访问原目标对象,以达到…...
Umi微前端水印踩坑以及解决方案
最近公司需要在管理后台加一个水印方案~ 项目用的umi方案,以为就是改一个配置的问题,后来发现坑点还蛮多~ 希望此稳定能帮助到用umi 的你们. 一. 先来说说心路历程 坑点1 umi的水印适配只能在layout中进行配置,也就是路由配置中layout为false的页面无法配置水印,比如说登录页…...
Android RK3588-12 hdmi-in Camera方式支持NV24格式
hdmi-in Camera方式支持NV24格式 modified: hardware/interfaces/camera/device/3.4/default/ExternalCameraDevice.cpp modified: hardware/interfaces/camera/device/3.4/default/ExternalCameraDeviceSession.cpp diff --git a/hardware/interfaces/camera/device/3.4…...
Hive窗口函数详细介绍
文章目录 Hive窗口函数概述样本数据表结构表数据 窗口函数窗口聚合函数count()SQL演示 sum()SQL演示 avg()SQL演示 min()SQL演示 max()SQL演示 窗口分析函数first_value() 取开窗第一个值应用场景SQL演示 last_value()取开窗最后一个值应用场景SQL演示 lag(col, n, default_val…...
牛客网【c语言练习】
单选题 下面代码段的输出是(-12 ) int main() {int a3; printf("%d\n",(aa-a*a)); } aa-9,此时还是等于3,因为a*a只是运算,并没有赋值;之后再算a-9,运算之前a等于3,运算…...
C++类和对象(上)
文章目录 🦍1. 面向过程和面向对象🦧2. 类的引入🐶3. 类的定义🦮4. 类的访问控制和封装🍖4.1 访问限定符🍖4.2 封装 🐩5. 类的作用域🐅6. 类的实例化🐄7. 类的大小计算&a…...
JavaScript 数据透视表 DHTMLX Pivot Crack
DHTMLX Pivot JavaScript 数据透视表 - 强大的数据汇总和报告 使用我们的高速 JavaScript/HTML5 Pivot 组件可视化您的复杂数据,从而提高您的商业智能。 它可以帮助您以方便的方式汇总大型数据集。 主要特征 纯 JavaScript 库,可轻松与任何服务器端集成…...
QT链接库设置
以windows 平台为例,在.pro 文件中: 1 增加 INCLUDEPATH <头文件路径> DEPENDPATH <头文件路径> 2 LIBS -L<库目录路径> -l<库得名字> 3 设置MT、MTD、MD、MDD运行时库 win32:CONFIG(debug, debug|release): { QMAKE_CFLAGS_…...
零点起飞学Android——期末考试课本复习重点
目录 第一章 认识Android第二章 Android常见界面布局第三章 Android常用基本控件第四章 Android 高级控件第五章 Android菜单和对话框 第一章 认识Android 1. Android 界面设计被称为______。 答案:布局 2. Android中常见的布局包括______、______ 、______ 、____…...
Redis为什么快?
目录 Redis为什么快?渐进式ReHash全局哈希表渐进式ReHash 缓存时间戳 Redis为什么快? 纯内存访问; 单线程避免上下文切换; 渐进式ReHash、缓存时间戳; 前面两个都比较好理解,下面我们主要来说下 渐进式…...
在软件开发中正确使用MySQL日期时间类型的深度解析
在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...
【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...
屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...
IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...
【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论
路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中(图1): mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...
OCR MLLM Evaluation
为什么需要评测体系?——背景与矛盾 能干的事: 看清楚发票、身份证上的字(准确率>90%),速度飞快(眨眼间完成)。干不了的事: 碰到复杂表格(合并单元…...
数据结构第5章:树和二叉树完全指南(自整理详细图文笔记)
名人说:莫道桑榆晚,为霞尚满天。——刘禹锡(刘梦得,诗豪) 原创笔记:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 上一篇:《数据结构第4章 数组和广义表》…...
解析“道作为序位生成器”的核心原理
解析“道作为序位生成器”的核心原理 以下完整展开道函数的零点调控机制,重点解析"道作为序位生成器"的核心原理与实现框架: 一、道函数的零点调控机制 1. 道作为序位生成器 道在认知坐标系$(x_{\text{物}}, y_{\text{意}}, z_{\text{文}}…...
