SpringBoot3+JDK21集成MyBatisPlus3.5.5

哈喽,大家好,我是呼噜噜,在上一篇文章SpringBoot3+Jdk17来了 | 春见知识分享基础上,笔者把jdk17直接换成了jdk21一步到位,来踩踩坑

添加依赖

修改pom.xml文件:

  <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-spring-boot3-starter</artifactId><version>3.5.5</version></dependency><!--        生成器--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.5.3</version></dependency><!--        mysql驱动依赖--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</version></dependency>

试了很多版本,坑还是非常多的,这几个还是比较兼容的

修改配置文件

修改application.yml文件,如果没有,那建议把application.properties改成application.yml,格式更加清爽,一目了然,当然你也可以不换

spring:datasource:url: jdbc:mysql://192.xx9.xx3.xx:3306/test?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=trueusername: rootpassword: xxx

添加数据库的连接地址,用户名,密码

在JDBC连接url中有几个项属性,我们分别来看下:

zeroDateTimeBehavior=convertToNull

如果没有添加zeroDateTimeBehavior,在操作值为0的timestamp类型时不能正确的处理,而是默认抛出一个异常
该属性有下列三个属性值:

  • exception:默认值,即抛出SQL state [S1009]. Cannot convert value…的异常
  • convertToNull:将日期转换成NULL值
  • round:替换成最近的日期即0001-01-01

useUnicode=true&characterEncoding=utf-8

使用Unicode字符集并且设置字符编码为utf-8,一旦设置后,不管数据库是什么编码,读出与写入都会自动切换编码

autoReconnect=true

设置超时重连

支持分页

src/main/java/com.zj.java21demo/config目录下,新建一个类MybatisPlusConfig

@Configuration
//@MapperScan("scan.your.mapper.package")
public class MybatisPlusConfig {/*** 添加分页插件*/@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));//如果配置多个插件,切记分页最后添加//interceptor.addInnerInterceptor(new PaginationInnerInterceptor()); 如果有多数据源可以不配具体类型 否则都建议配上具体的DbTypereturn interceptor;}
}

其中com.zj.java21demo是包名,根据自己的来,DbType.MYSQL是数据源的类型

支持代码自动生成

添加依赖

<!-- 模板引擎 -->
<dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.30</version>
</dependency>
<!-- lombok -->
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>RELEASE</version><scope>compile</scope>
</dependency>

新建自动生成的类CodeGenerator,并将其与启动类Java21DemoApplication放在同一个目录下:

package com.zj.java21demo;import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import io.micrometer.common.util.StringUtils;import java.util.Collections;
import java.util.Scanner;public class CodeGenerator {/*** <p>* 读取控制台内容* </p>*/public static String scanner(String tip) {Scanner scanner = new Scanner(System.in);StringBuilder help = new StringBuilder();help.append("请输入" + tip + ":");System.out.println(help.toString());if (scanner.hasNext()) {String ipt = scanner.next();if (StringUtils.isNotBlank(ipt)) {return ipt;}}throw new MybatisPlusException("请输入正确的" + tip + "!");}public static void main(String[] args) {FastAutoGenerator.create("jdbc:mysql://127.0.0.1:3306/test?characterEncoding=UTF-8&useUnicode=true&useSSL=false", "root", "abc123")// 全局配置.globalConfig(builder -> {builder.author("xiaoniuhululu") // 设置作者.commentDate("yyyy-MM-dd hh:mm:ss")   //注释日期.outputDir(System.getProperty("user.dir") + "/src/main/java") // 指定输出目录.disableOpenDir() //禁止打开输出目录,默认打开;})// 包配置.packageConfig(builder -> {builder.parent("com.zj.java21demo") // 设置父包名!!!!.pathInfo(Collections.singletonMap(OutputFile.xml, System.getProperty("user.dir") + "/src/main/resources/mappers")); // 设置mapperXml生成路径})// 策略配置.strategyConfig(builder -> {builder//.addInclude("sys_menu") // 设置需要生成的表名.addInclude(scanner("表名,多个英文逗号分割").split(","))
//           .addTablePrefix("sys_") // 设置过滤表前缀// Entity 策略配置.entityBuilder().enableLombok() //开启 Lombok.enableFileOverride() // 覆盖已生成文件.naming(NamingStrategy.underline_to_camel)  //数据库表映射到实体的命名策略:下划线转驼峰命.columnNaming(NamingStrategy.underline_to_camel)    //数据库表字段映射到实体的命名策略:下划线转驼峰命// Mapper 策略配置.mapperBuilder().enableFileOverride() // 覆盖已生成文件// Service 策略配置.serviceBuilder().enableFileOverride() // 覆盖已生成文件.formatServiceFileName("%sService") //格式化 service 接口文件名称,%s进行匹配表名,如 UserService.formatServiceImplFileName("%sServiceImpl") //格式化 service 实现类文件名称,%s进行匹配表名,如 UserServiceImpl// Controller 策略配置.controllerBuilder().enableFileOverride() // 覆盖已生成文件;}).templateEngine(new FreemarkerTemplateEngine()) // 我们这里使用Freemarker引擎模板,默认的是Velocity引擎模板.execute();}
}

注意要设置好包名

我们接着开始测试,通过navicat建好表user

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (`id` int NOT NULL AUTO_INCREMENT,`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '姓名',`account` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '账号',`password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '密码',`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',`modified_time` datetime NULL DEFAULT NULL COMMENT '修改时间',`is_active` int NULL DEFAULT NULL COMMENT '有效标志',PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;

然后直接运行CodeGenerator,输入表名user,如果时多个表名用,隔开

还需要注意的时UserMapper类,需要添加注解@Mapper

@Mapper  //!!!
public interface UserMapper extends BaseMapper<User> {}

测试并验证crud

这个就不具体展开了,可以通过postman调用接口来测试,也可以单元测试来测试


感谢阅读,原创不易,如果有收获的话,就点个免费的[]or[转发],你的支持会激励我输出更高质量的文章,感谢!

计算机内功、源码解析、科技故事、项目实战等更多硬核文章,在公众号「小牛呼噜噜」,感兴趣可以关注一下!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/644583.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

日历的实现(java语言,包括钟表盘的实现、日历内部的日程提醒)

整理文件发现了大一的时候的作业&#xff0c;先感慨一波时间过得真的快&#xff01; 手中的这个是一个独立的java文件&#xff0c;可以直接就可以运行&#xff0c;应该是没有什么问题的。不想这个代码就此落灰了&#xff0c;希望可以给友友们带来一点点帮助&#xff01; 运行…

避免邮件进入垃圾箱的实用技巧:提高邮件接收率的策略

邮件进垃圾邮箱一部分原因是IP地址出现了问题&#xff0c;一部分是邮件内容。那我们应该怎么避免邮件进入垃圾邮箱呢&#xff1f; 1、邮件内容 1&#xff09;邮件标题 邮件标题是影响邮件打开率非常重要的因素&#xff0c;所以大家可能会在标题上放置一些吸引人的符号或者词…

聚道云连接器助力钉钉与金蝶云星辰无缝对接,实现多维度数据同步

客户介绍 某企业服务有限公司专注于为企业提供全方位、高质量的企业服务&#xff0c;致力于于企业管理咨询、企业形象策划、市场营销策划、财务管理咨询等方面。该公司拥有一支经验丰富、专业化的团队&#xff0c;他们深入了解企业需求&#xff0c;为客户提供个性化的解决方案…

列表的创建与删除

Python 中列表可以动态地添加、修改和删除元素&#xff0c;是 Python 编程中不可或缺的一部分。本文将介绍如何使用 Python 创建和删除列表&#xff0c;以及常用的方法和技巧。 创建列表 在 Python 中&#xff0c;我们可以使用一对方括号 [ ] 来创建一个空列表&#xff0c;也可…

开源免费无广告Gopeed,现代化的高速下载器,支持(HTTP、BitTorrent、Magnet)等多种协议下载,开源免费、无广告、高度可定制、不限速。

目录 特点 支持的平台 一键部署 体验 特点 全平台支持、开源免费&#xff0c;不限速、无广告 遵循 GPL-3.0 开源协议 支持&#xff08;HTTP、BitTorrent、Magnet&#xff09;协议下载 高速下载&#xff0c;底层使用golang协程并发下载 每日自动更新 tracker 列表 去中心…

IPv4 over IPv6简介

在IPv4 Internet向IPv6 Internet过渡的后期&#xff0c;IPv6网络已被大量部署&#xff0c;此时可能出现IPv4孤岛。利用隧道技术可在IPv6网络上创建隧道&#xff0c;从而实现IPv4孤岛的互连。这类似于在IP网络上利用隧道技术部署VPN。在IPv6网络上用于连接IPv4孤岛的隧道&#x…

Oracle触发器简单应用示例

目录 一、应用描述 【1】、应用场景&#xff1a; 【2】、具体场景&#xff1a; 二、表结构介绍 【1】表名介绍&#xff1a; 【2】表结构&#xff1a; 三、设置触发器 一、应用描述 【1】、应用场景&#xff1a; 现有一张库存明细以及销售明细表&#xff0c;销售明细表发生…

知识图谱符号表示比较:特性图、RDF和OWL

目录 前言1 特性图&#xff1a;灵活的图结构表示1.1 优势与灵活性1.2 存储优化与查询优势1.3 挑战&#xff1a;缺乏工业标准支持 2 RDF&#xff08;Resource Description Framework&#xff09;&#xff1a;面向Web的数据标准2.1 三元组结构的优势2.2 语义标准与词汇丰富性2.3 …

elment-plus如何引入scss文件实现自定义主题色

elment-plus如何引入scss文件实现自定义主题色&#xff01;如果您想修改elementPlus的默认主题色调&#xff0c;使用自定义的色调&#xff0c;可以考虑使用官方提供的解决办法。 第一步你需要在项目内安装sass插件包。 npm i sass -D 如图&#xff0c;安装完成后&#xff0c;你…

gdzwfw某省公共资源交易平台逆向学习

声明&#xff1a;本文中网站仅为学习技术使用&#xff0c;请勿暴力爬取数据。 学习地址&#xff1a;aHR0cHM6Ly95Z3AuZ2R6d2Z3Lmdvdi5jbi8jLzQ0L2p5Z2c 此网站采用请求头反爬&#xff0c;难点是请求头中几个参数是如何生成的&#xff08;别问为什么知道是请求头&#xff0c;一…

java进阶-jvm精讲及实战

深入了解jvm及实战 1.引言2.jvm概念理解1.1什么是jvm1.2 jvm功能1.3 jvm规范及主流版本1.4 jre jdk jvm的区别和联系1.5 jvm组成 2.jvm-字节码文件class2.1 java和class无关性2.2 字节码应用场景2.4 字节码文件打开方式2.3 字节码文件组成2.3.1 一般信息2.3.2 常量池2.3.3 方法…

Flutter底部导航栏插件persistent_bottom_nav_bar的使用

flutter 框架中的 persistent_bottom_nav_bar 插件可以让我们快速实现页面底部导航栏&#xff08;也就是 bottomNavigationBar &#xff09;的布局且能拥有多样的切换效果&#xff08;包括但不限于&#xff1a;动画切换效果、中间凸起按钮效果等&#xff09; 插件网址&#xf…

【MySQL·8.0·源码】subquery 子查询处理分析(一)

引言 在 SQL 中&#xff0c;子查询属于 Nested Query 的一种形式&#xff0c;根据 Kim 的分类[1]&#xff0c;Nested Query 即嵌套查询是一种 SQL-like 形式的查询语句嵌套在另一 SQL 中&#xff0c;SQL-like 的嵌套子句可以出现在 SELECT、FROM 和 WHERE 子句的任意位置。 在…

GBASE南大通用分享如何更新row类型表达式

从 SPL 例程内&#xff0c;您可使用 ROW 变量来更新 row 类型表达式。下图展示当员工的基本薪 酬按某一百分比增长时&#xff0c;用于更新 emp_info 表的 SPL 过程 emp_raise。 用于更新 emp_info 表的 SPL 过程。 SELECT 语句将来自 emp_info 表的 salary 列的行选择到 ROW …

Java项目:125SpringBoot教室预约管理系统

博主主页&#xff1a;Java旅途 简介&#xff1a;分享计算机知识、学习路线、系统源码及教程 文末获取源码 一、项目介绍 教室预约管理系统使用SpringBootMybatis进行开发&#xff0c;系统整体分为前台和后台&#xff0c;后台主要对教室&#xff0c;用户等信息进行管理&#xf…

SpringBoot+MyBatis使用pagehelper分页插件及其注意事项(含解决分页不生效问题)

1 前言 近期在做项目的时候&#xff0c;遇到了一个问题&#xff1a;在使用MyBatis的分页插件&#xff08;pagehelper&#xff09;时&#xff0c;发现其分页不生效&#xff0c;找了许多方法才得以解决&#xff0c;故写下这篇文章记录一下&#xff0c;帮助跟我遇到同样问题的同学…

无人机航迹规划(六):七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划(提供MATLAB代码)

一、七种算法&#xff08;DBO、LO、SWO、COA、LSO、KOA、GRO&#xff09;简介 1、蜣螂优化算法DBO 蜣螂优化算法&#xff08;Dung beetle optimizer&#xff0c;DBO&#xff09;由Jiankai Xue和Bo Shen于2022年提出&#xff0c;该算法主要受蜣螂的滚球、跳舞、觅食、偷窃和繁…

阿赵UE学习笔记——解决UE资源不能正常显示缩略图的问题

阿赵UE学习笔记目录 大家好&#xff0c;我是阿赵。   这里分享一个虚幻引擎使用小技巧。在使用虚幻引擎的过程中&#xff0c;经常会遇到有些资源在重新打开项目的时候&#xff0c;会看不到缩略图&#xff0c;而是显示默认资源的图标&#xff1a; 这个时候&#xff0c;第一种…

java web mvc-06-play framework intro

拓展阅读 Spring Web MVC-00-重学 mvc mvc-01-Model-View-Controller 概览 web mvc-03-JFinal web mvc-04-Apache Wicket web mvc-05-JSF JavaServer Faces web mvc-06-play framework intro web mvc-07-Vaadin web mvc-08-Grails 开源 The jdbc pool for java.(java …

每日一题——LeetCode1331.数组序号转换

方法一 排序哈希Map 首先用一个数组保存排序完的原数组&#xff0c;然后用一个哈希表保存各元素的序号&#xff0c;最后将原属组的元素替换为序号后返回。 var arrayRankTransform function(arr) {let set new Set(arr)let sortArrArray.from(set).sort((a,b)>a-b)let ma…