SpringBoot3.x + JDK21 整合 Mybatis-Plus

news2024/11/17 5:22:07

前言

SpringBoot3.0 开始最低要求 Java 17,虽然目前最新的版本为 JDK22,但是在官网上看到 JDK23 在今年9月又要发布了,感觉这 JDK 也有点太过于给力了

所以我们选择用目前的 LTS 版本 JDK21 就好了,不用追求最新的

springboot 版本

从官网的 https://start.spring.io/ 可以看到,目前的 SpringBoot 的最新正式版为 3.2.5,JAVA版本支持 17、21、22

mybatis-plus 版本

mybatis-plus 针对 springboot3.x 发布了新的依赖库,我们要选择带 spring-boot3 的版本

项目整合

项目资源下载

创建项目

JDK 选择 21,Java 选择 21

Spring Boot 选择 3.2.5,依赖选择 Spring Web

最后点击 Create 创建项目

pom.xml 文件

引入了 mybatis-plus 依赖包,还有对应生成器所需的依赖包

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>3.2.5</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>

	<groupId>org.liurb</groupId>
	<artifactId>Springboot3-CRUD</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>Springboot3-CRUD</name>
	<description>Springboot3-CRUD</description>

	<properties>
		<java.version>21</java.version>
		<mybatis-plus.version>3.5.6</mybatis-plus.version>
		<freemarker.version>2.3.32</freemarker.version>
		<mysql-connector-java.version>8.4.0</mysql-connector-java.version>
	</properties>

	<dependencies>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<dependency>
			<groupId>com.baomidou</groupId>
			<artifactId>mybatis-plus-spring-boot3-starter</artifactId>
			<version>${mybatis-plus.version}</version>
		</dependency>

		<dependency>
			<groupId>com.baomidou</groupId>
			<artifactId>mybatis-plus-generator</artifactId>
			<version>${mybatis-plus.version}</version>
		</dependency>

		<dependency>
			<groupId>com.mysql</groupId>
			<artifactId>mysql-connector-j</artifactId>
			<version>${mysql-connector-java.version}</version>
			<scope>runtime</scope>
		</dependency>

		<dependency>
			<groupId>org.freemarker</groupId>
			<artifactId>freemarker</artifactId>
			<version>${freemarker.version}</version>
		</dependency>

		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

</project>

生成代码

我们创建一张表 demo_user 进行测试

创建代码生成器

public class CodeGenerator {

    // 数据库连接配置
    private static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";
    private static final String JDBC_URL = "jdbc:mysql://192.168.1.31:3307/my_db?useSSL=false";
    private static final String JDBC_USER_NAME = "test_usr";
    private static final String JDBC_PASSOWRD = "test_usr#Passw0rd";

    // 输出目录
    private static final String MAIN_JAVA_PATH = "/src/main/java";
    private static final String MAIN_MAPPER_PATH = "/src/main/resources/mapper";

    // 包名和模块名
    private static final String PACKAGE_NAME = "org.liurb.springboot3";
    private static final String MODULE_NAME = "crud";


    // 表名,多个表使用英文逗号分割
    private static final String TBL_NAMES = "demo_user";

    // 表名的前缀,从表生成代码时会去掉前缀
    private static final String TABLE_PREFIX = "";


    // 生成代码入口main方法
    public static void main(String[] args) {

        FastAutoGenerator.create(JDBC_URL, JDBC_USER_NAME, JDBC_PASSOWRD)
                .globalConfig(builder -> builder
                        .author("liurb") // 设置作者
                        .outputDir(Paths.get(System.getProperty("user.dir")) + MAIN_JAVA_PATH) // 输出路径
                        .commentDate("yyyy-MM-dd")
                        .disableOpenDir() // 禁止打开输出目录
                )
                .packageConfig(builder -> builder
                        .parent(PACKAGE_NAME) // 设置需要生成的表名
                        .moduleName(MODULE_NAME) // 设置过滤表前缀
                        .pathInfo(Collections.singletonMap(OutputFile.xml, Paths.get(System.getProperty("user.dir")) + MAIN_MAPPER_PATH)) // 设置mapperXml生成路径
                )
                .strategyConfig(builder -> builder
                        .addInclude(TBL_NAMES) // 设置需要生成的表名
                        .addTablePrefix(TABLE_PREFIX) // 设置过滤表前缀
                        .entityBuilder() // 设置实体类
                        .enableFileOverride() // 实体类覆盖
                        .enableTableFieldAnnotation() // 属性加上说明注释
                        .enableLombok() // 使用lombok
                        .serviceBuilder() // 设置服务类
                        .formatServiceFileName("%sService") // 格式化service类
                )
                .templateEngine(new FreemarkerTemplateEngine())
                .execute();

    }

}

运行生成 demo_user 表的对应代码

配置数据库链接

spring:
  application:
    name: Springboot3-CRUD

  #配置数据源
  datasource:
    url: jdbc:mysql://192.168.1.31:3307/my_db?useSSL=false&useUnicode=true&characterEncoding=utf-8
    username: test_usr
    password: test_usr#Passw0rd
    driver-class-name: com.mysql.cj.jdbc.Driver
    hikari:
      minimum-idle: 5
      maximum-pool-size: 10
      max-lifetime: 1800000
      idle-timeout: 180000
      connection-timeout: 30000

配置 MapperScan 注解

@SpringBootApplication
@MapperScan("org.liurb.**.mapper") // mapper 类路径
public class Springboot3CrudApplication {

	public static void main(String[] args) {
		SpringApplication.run(Springboot3CrudApplication.class, args);
	}

}

测试用例

我们通过单元测试保存一条记录

@SpringBootTest
class Springboot3CrudApplicationTests {

	@Resource
	DemoUserService demoUserService;

	@Test
	void contextLoads() {

		DemoUser record = new DemoUser();
		record.setName("李四");
		record.setAge(18);
		demoUserService.save(record);

	}

}

记录保存成功

创建查询接口

在控制层加入查询接口,根据 用户id 查询对应的记录

@RestController
@RequestMapping("/crud/demoUser")
public class DemoUserController {

    @Resource
    DemoUserService demoUserService;

    @GetMapping("/{userId}")
    public DemoUser user(@PathVariable Long userId) {

        return demoUserService.getById(userId);
    }

}

请求返回

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

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

相关文章

【大数据】MapReduce JAVA API编程实践及适用场景介绍

目录 1.前言 2.mapreduce编程示例 3.MapReduce适用场景 1.前言 本文是作者大数据系列专栏的其中一篇&#xff0c;前文我们依次聊了大数据的概论、分布式文件系统、分布式数据库、以及计算引擎mapreduce核心概念以及工作原理。 书接上文&#xff0c;本文将会继续聊一下mapr…

未来十年,IT行业的无限可能!

未来十年&#xff0c;IT行业的无限可能&#xff01; &#x1f604;生命不息&#xff0c;写作不止 &#x1f525; 继续踏上学习之路&#xff0c;学之分享笔记 &#x1f44a; 总有一天我也能像各位大佬一样 &#x1f3c6; 博客首页 怒放吧德德 To记录领地 &#x1f31d;分享学…

2024 电工杯(B题)数学建模完整思路+完整代码全解全析

你是否在寻找数学建模比赛的突破点&#xff1f;数学建模进阶思路&#xff01; 作为经验丰富的数学建模团队&#xff0c;我们将为你带来2024电工杯数学建模竞赛&#xff08;B题&#xff09;的全面解析。这个解决方案包不仅包括完整的代码实现&#xff0c;还有详尽的建模过程和解…

短剧APP开发,短剧行业发展下的财富密码

今年以来&#xff0c;短剧市场展现出了繁荣发展的态势&#xff0c;成为了一个风口赛道。 短剧具有不拖沓、时长短、剧情紧凑等优势&#xff0c;顺应了当代人的生活&#xff0c;是当代人的“电子榨菜”。 短剧的快速发展同时也带动了新业态新模式的发展&#xff0c;短剧APP就是…

【Avalonia入门篇1】Avalonia的安装

目录 一、环境安装 1.1 安装.NET 1.2 安装Avalonia模板 1.3 安装VS编译器 1.4 安装Avalonia扩展 二、创建第一个Avalonia项目 一、环境安装 1.1 安装.NET 按照官网提示下载并安装.NET。如下图所示&#xff1a; 安装完成后&#xff0c;打开power shell&#xff0c;输入下…

Vue的学习 —— <Echarts组件库技术应用>

目录 前言 正文 一、ECharts技术简介 二、Vue3集成Echarts 1、安装Echarts 2、引入方式 三、Echarts基础篇 1、图表容器及大小 2、样式 2.1 颜色主题 3、坐标轴 5、数据集 5.1 在series中设置数据集 5.2 在dataset中设置数据集 四、常用图表实操 1、柱状图 2、…

特殊变量笔记2

案例需求 在demo4.sh中循环打印输出所有输入参数, 体验$*与$的区别 实现步骤 编辑demo4.sh脚本文件 # 增加命令: 实现直接输出所有输入后参数 # 增加命令: 使用循环打印输出所有输入参数演示 编辑demo4.sh文件 直接输出所有输入参数, 与循环方式输出所有输入参数(使用双引…

轻型web服务器搭建 阿里云

1.购买云服务器 2.远程连接云服务器 重置实例密码 重置后要重启服务器 登录云服务器 密码就是刚刚重置的 3.安装宝塔面板 宝塔面板 - 简单好用的Linux/Windows服务器运维管理面板 (bt.cn) 回车则开始安装&#xff0c;过程中会多次让输入y表示确认下一步&#xff0c;过程大概2…

3D 生成重建013-ProlificDreamer将SDS拓展到VSD算法进行高质量的3D生成

3D 生成重建013-ProlificDreamer将SDS拓展到VSD算法进行高质量的3D生成 文章目录 0论文工作1论文方法2效果 0论文工作 **分数蒸馏采样&#xff08;SDS&#xff09;**通过提取预先训练好的大规模文本到图像扩散模型&#xff0c;在文本到3d生成方面显示出了巨大的前景&#xff0…

【机器学习】期望最大化(EM)算法

文章目录 一、极大似然估计1.1 基本原理1.2 举例说明 二、Jensen不等式三、EM算法3.1 隐变量 与 观测变量3.2 为什么要用EM3.3 引入Jensen不等式3.4 EM算法步骤3.5 EM算法总结 参考资料 EM是一种解决 存在隐含变量优化问题 的有效方法。EM的意思是“期望最大化&#xff08;Exp…

初识Java--开启我的Java学习之旅

目录 一、JAVA语言概述二、JAVA语言的重要性2.1语言使用广泛程度2.2工作领域2.3在校招岗位的需求2.4 java语言发展简史2.5Java语言特性 三、初识java的main方法四、运行java程序五、【面试题】JDK、JRE、JVM之间的关系&#xff1f; 一、JAVA语言概述 Java是一种优秀的程序设计…

在线人才测评在企业招聘和大学生求职中的应用场景

每年的春招秋招&#xff0c;都是毕业生们忙着找工作的季节&#xff0c;相比社招来说&#xff0c;春招秋招是每个毕业生务必重视的机会&#xff0c;大厂名企毕竟名额有限&#xff0c;如果找到自己心仪的职业岗位&#xff0c;作为毕业生就必须提前准备&#xff0c;深入了解招聘的…

09.责任链模式

09. 责任链模式 什么是责任链设计模式&#xff1f; 责任链设计模式&#xff08;Chain of Responsibility Pattern&#xff09;是一种行为设计模式&#xff0c;它允许将请求沿着处理者对象组成的链进行传递&#xff0c;直到有一个处理者对象能够处理该请求为止。这种模式的目的…

docker ps显示的参数具体是什么意思

1&#xff0c;运行一个容器 docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"这段命令的作用是使用 docker run 命令运行一个基于 ubuntu:15.10 镜像的 Docker 容器&#xff0c;并在容器中执行一个无限循环的命令。 具体解…

PID控制中的积分到底是什么,为什么它可以将矩形线转换为曲线?simulink搭建PID控制,积分模块1/s

PID控制中的积分到底是什么&#xff0c;为什么它可以将矩形线转换为曲线&#xff0c; 这个问题呢其实道理很简单&#xff0c;用到的是初中的知识 我们做几个测试案例 如下面matlab搭建了积分1/s 那显示如下&#xff08;红色曲线相当于加速度、蓝色曲线相当于速度&#xff09;&a…

从0到1!得物如何打造通用大模型训练和推理平台

1.背景 近期&#xff0c;GPT大模型的发布给自然语言处理&#xff08;NLP&#xff09;领域带来了令人震撼的体验。随着这一事件的发生&#xff0c;一系列开源大模型也迅速崛起。依据一些评估机构的评估&#xff0c;这些开源模型大模型的表现也相当不错。一些大模型的评测情况可…

【MSSQL】因为数据库正在使用,所以无法获得对数据库的独占访问权” 解决方案汇总

文章目录 前言一、事故现场方案一:设置数据库再单用户模式下工作:方案二:利用SQL语句,断开所有用户连接,并回滚所有事务,具体SQL语句如下:方案三:利用SQL语句,杀死正在使用该数据库的所有进程方案四:修改数据库的登录密码或重启数据库服务(不太建议)二、结尾日志备份…

MDS800-16-ASEMI整流模块800A 1600V

编辑&#xff1a;ll MDS800-16-ASEMI整流模块800A 1600V 型号&#xff1a;MDS800-16 品牌&#xff1a;ASEMI 封装&#xff1a;MDS 批号&#xff1a;2024 分类&#xff1a;整流模块 特性&#xff1a;整流模块、整流桥 平均正向整流电流&#xff08;Id&#xff09;&#…

C语言实现Hash Map(2):Map代码实现详解

在上一节C语言实现Hash Map(1)&#xff1a;Map基础知识入门中&#xff0c;我们介绍了Map的基础概念和在C中的用法。但我写这两篇文章的目的是&#xff0c;能够在C语言中实现这样的一个数据结构&#xff0c;毕竟有时我们的项目中可能会用到Map&#xff0c;但是C语言库中并没有提…

香蕉成熟度检测YOLOV8NANO

香蕉成熟度检测YOLOV8NANO&#xff0c;采用YOLOV8NANO训练&#xff0c;得到PT模型&#xff0c;然后转换成ONNX模型&#xff0c;让OEPNCV调用&#xff0c;从而摆脱PYTORCH依赖&#xff0c;支持C。python&#xff0c;安卓开发。能检测六种香蕉类型freshripe freshunripe overripe…