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、缓存时间戳; 前面两个都比较好理解,下面我们主要来说下 渐进式…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序
一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...
爬虫基础学习day2
# 爬虫设计领域 工商:企查查、天眼查短视频:抖音、快手、西瓜 ---> 飞瓜电商:京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空:抓取所有航空公司价格 ---> 去哪儿自媒体:采集自媒体数据进…...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...
HarmonyOS运动开发:如何用mpchart绘制运动配速图表
##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...
springboot整合VUE之在线教育管理系统简介
可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...
使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...
人机融合智能 | “人智交互”跨学科新领域
本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...
