【springboot进阶】基于starter项目构建(二)构建starter项目-mysql

news2024/11/25 11:05:54

目录

一、创建 mysql-spring-boot-starter 项目

二、添加 pom 文件依赖

三、构建配置

1. mybatis-plus分页配置 MybatisPlusConfig

2. mybatis-plus代码生成器 CodeGenerator

四、加载自动化配置

五、打包

六、使用


这个系列讲解项目的构建方式,主要使用 父项目 parent 和 自定义 starter 结合。项目使用最新的 springboot3 和 jdk19。本系列的代码仓库看查看 gitee 仓库 的 starter 目录。

这篇我们开始学习创建属于自己的 starter ,实现一些常用模块的封装和自动配置,模拟 spirngboot 的 starter 模式,看看怎么将项目构建为 mysql starter 。

一、创建 mysql-spring-boot-starter 项目

一般官方的 starter 是以 spring-boot-starter-{模块名},所以我们这边自定义的时候,区分于官方的命令,将模块名放在前面。

我们还是以一个 springboot 项目的方式来创建,如下图。

选择目前最新的3.0.0版本,下面的依赖不需要勾选,等下我们再添加。

二、添加 pom 文件依赖

<?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.liurb.springboot.scaffold</groupId>
		<artifactId>backend-parent</artifactId>
		<version>1.0.0</version>
		<relativePath />
	</parent>

	<artifactId>mysql-spring-boot-starter</artifactId>
	<version>1.0.0</version>
	<name>mysql-spring-boot-starter</name>
	<description>mysql-spring-boot-starter</description>

	<dependencies>

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

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

		<dependency>
			<groupId>com.baomidou</groupId>
			<artifactId>mybatis-plus-generator</artifactId>
		</dependency>

		<dependency>
			<groupId>com.github.yulichang</groupId>
			<artifactId>mybatis-plus-join</artifactId>
		</dependency>

		<dependency>
			<groupId>com.mysql</groupId>
			<artifactId>mysql-connector-j</artifactId>
			<scope>runtime</scope>
		</dependency>

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

		<!--表示两个项目之间依赖不传递;不设置optional或者optional是false,表示传递依赖-->
		<!--例如:project1依赖a.jar(optional=true),project2依赖project1,则project2不依赖a.jar-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-configuration-processor</artifactId>
			<optional>true</optional>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-autoconfigure</artifactId>
			<optional>true</optional>
		</dependency>

	</dependencies>

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

	<repositories>
		<!-- 下载mybatis-plus SNAPSHOT 版本所需仓库 -->
		<repository>
			<id>ossrh</id>
			<name>OSS Snapshot repository</name>
			<url>https://oss.sonatype.org/content/repositories/snapshots/</url>
			<releases>
				<enabled>false</enabled>
			</releases>
			<snapshots>
				<enabled>true</enabled>
			</snapshots>
		</repository>

	</repositories>

</project>

依赖说明:

1)mybatis-plus-boot-starter:使用 mybatis-plus ,需要注意 springboot3 的版本问题,具体可详见 解决 springboot3 集成 mybatis-plus 报 sqlSession 异常

2)mybatis-plus-generator:代码生成器

3)mybatis-plus-join:多表联表插件,可以通过 api 的方式写出联表 sql 需求

4)mysql-connector-j:Mysql 链接驱动,注意从 8.0.31 版本开始已经迁移到新的包

仓库说明:

OSS Snapshot repository 为了引入 mybatis-plus 的快照版本,解决 spirngboot3 的问题

三、构建配置

搭建好的 starter 目录与代码如下图。

1. mybatis-plus分页配置 MybatisPlusConfig

@AutoConfiguration
@ConditionalOnClass(value = {PaginationInnerInterceptor.class})
public class MybatisPlusConfig {

    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
        mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return mybatisPlusInterceptor;
    }

}

2. mybatis-plus代码生成器 CodeGenerator

项目使用 3.5.3 版本,注意每个版本可能写法都有些不一样,一般官网都有说明。

使用也简单,写一个main方法就传入对应的值就行了,使用builder模式

    public static void main(String[] args) {
        CodeGenerator codeGenerator = CodeGenerator.builder().jdbcUrl(jdbcUrl).jdbcUserName(jdbcUserName).jdbcPassword(jdbcPassword)
                .daoOutputDirRelate(daoOutputDirRelate).mapperOutputDirRelate(mapperOutputDirRelate).author(author)
                .packageName(packageName).moduleName(moduleName).tableNames(tableNames).tablePrefix(tablePrefix)
                .build();

        codeGenerator.generator();
    }

四、加载自动化配置

从 springboot 2.7 的时候,spring.factories 这种方式已经标记为过期的,所以从 springboot3 开始已经完全移除了。所以我们要在 resources/META-INF 目录创建 org.springframework.boot.autoconfigure.AutoConfiguration.imports 文件。

将我们 conf 目录下的 MybatisPlusConfig 类加包路径定义在这里。如果有多个的情况,就一行配置一个。

五、打包

这时候执行 mvn package & mvn install ,这样就将这个 starter 安装到本地仓库中。

六、使用

可以看 gitee 仓库的 springboot-advance-demo 项目。

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

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

相关文章

第二证券|事关A股!4万亿外资巨头最新研判

时值年末&#xff0c;在多重利好音讯提振下&#xff0c;我国股市迎来一波反弹&#xff0c;海外本钱大举加仓我国财物。下一年全球经济将走向何方&#xff1f;国内和海外商场又会有哪些变化&#xff1f;财物装备该怎样做&#xff1f;近期&#xff0c;联博资深商场策略师黄森玮、…

PyTorch - Cifar 数据集

文章目录项目说明cifar-10 数据集介绍代码实现构建数据集、加载器构建 卷积网络训练数据构建 VGG 加深网络训练测试项目说明 cifar-10 数据集介绍 cifar-10 数据集由 60000 张分辨率为 32x32 彩色图像组成&#xff1b; 共分为 10 类&#xff0c;每类包含 6000 张图像&#xff…

深入理解mysql的索引分类,覆盖索引,覆盖索引失效,回表,MRR

MySql系列整体栏目 内容链接地址【一】深入理解mysql索引本质https://blog.csdn.net/zhenghuishengq/article/details/121027025【二】深入理解mysql索引优化以及explain关键字https://blog.csdn.net/zhenghuishengq/article/details/128273593【三】深入理解mysql的索引分类&a…

odps创建周期任务及字符串与日期函数用法

odps简介 PB/EB级数据的离线存储(存储资源)及逻辑处理(计算资源)&#xff0c;集群可用性全托管。 MaxCompute(odps)是适用于数据分析场景的企业级SaaS&#xff08;Software as a Service&#xff09;模式云数据仓库&#xff0c;以Serverless架构提供快速、全托管的在线数据仓库…

[附源码]Python计算机毕业设计SSM基于的民宿租赁系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

STS安装反编译插操作

第一步&#xff1a;下载net.sf.jadclipse_3.3.0.ja离线插件 首先​​​​​​下载离线插件 JadClipse - Eclipse plugin download | SourceForge.netDownload JadClipse - Eclipse plugin for free. Jad Java decompiler plugin for Eclipse IDE.https://sourceforge.net/proj…

Java自定义注解实现

一、注解的定义和作用 1、定义   注解&#xff08;Annotation&#xff09;&#xff0c;也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性&#xff0c;与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面&…

51的原理图和pcb的注意事项及出现的问题与解决办法

本次总结基于立创eda的注意事项总结&#xff0c;如有疑问&#xff0c;欢迎交流。 1.焊盘设成地网络&#xff01;&#xff01;&#xff01;&#xff01; 2.pcb的基本步骤是布局---布线---泪滴---铺铜---缝合孔&#xff0c;记得泪滴和缝合孔!! 3.元器件的封装要选择贴片的 这样…

认识阻塞队列

认识阻塞队列一、相关概念1.1 阻塞队列是什么1.2 生产者消费者模型二、标准库中的阻塞队列2.1 使用2.2 生产者消费者模型实现三、实现阻塞队列3.1 循环队列3.2 实现的细节3.3 代码一、相关概念 1.1 阻塞队列是什么 阻塞队列是一种特殊的队列&#xff0c;也遵守 “先进先出” …

CENTOS上的网络安全工具(十六)容器特色的Linux操作

这一篇&#xff0c;我们继续在Docker上折腾。之前我们已经展示了如何在容器上搭建安全产品的部署环境&#xff0c;这里我们需要更进一步&#xff0c;讨论如何在容器上搭建开发与调试环境。这是学习安全产品并且自己构建安全产品的基础步骤。 〇、精简系统上的操作技巧 使用Dock…

【LeetCode】直线上最多的点数 [H](几何)

149. 直线上最多的点数 - 力扣&#xff08;LeetCode&#xff09; 一、题目 给你一个数组 points &#xff0c;其中 points[i] [xi, yi] 表示 X-Y 平面上的一个点。求最多有多少个点在同一条直线上。 示例 1&#xff1a; 输入&#xff1a;points [[1,1],[2,2],[3,3]] 输出&a…

【数据结构与算法分析】0基础带你学数据结构与算法分析11--AVL树

目录 二分查找 AVL 树 AVL 的平衡因子 AVL 的插入操作 单旋转 双旋转 对 AVL 树插入的总结 AVL 的移除操作 如果给定一个序列&#xff0c;你将如何在这个序列中查找一个给定元素 target&#xff0c;当找到时返回该元素的迭代器&#xff0c;否则返回末尾迭代器。首先排除…

python基于flask搭建http服务(二)—— 实现Excel上传、数据清洗、入库

一、技术点 利用flask 搭建简易的http服务,实现服务端文件上传;利用Blueprint将不同业务拆分至不同文件;利用bootstrap-fileinput组件构建页面;利用flask_cors配置允许跨域请求;利用sqlalchemy实现数据库连接;利用pandas实现Excel读取、清洗、入库;二、具体实现 2.1 目…

基于intel i3/i5/i7 视觉控制器 4个POE GigE

XM-5143 是针对机器视觉行业GigE相机应用场景的一款高性能工业计算机&#xff0c;可使用Intel 6/7代 65W 高性能CPU应对快速检测。4路独立Intel网络芯片&#xff0c;并支持POE供电&#xff0c;可减少布线。并配有快速隔离可编程DI/O芯片. XM-5143的规格产品类型机器视觉控制器防…

分布式事务都有哪些,到底有什么用,在项目当中该用哪个?

分布式的CAP理论应该是人尽皆知了&#xff0c;它描述了一致性&#xff08;C&#xff09;、可用性&#xff08;A&#xff09;、分区容错性&#xff08;P&#xff09;的一系列权衡。很多时候&#xff0c;我们要在一致性和可用性之间权衡&#xff0c;而分布式事务&#xff0c;就是…

20.EC实战 笔记本电脑的休眠唤醒是如何实现的

文章目录 1. EC什么时候(收到什么命令)之后来执行S0-->S3下电时序?2. S3(休眠)状态应该保留哪些电源?3. 控制笔记本进入休眠状态的三种方式总结:前言: 最近很多朋友在咨询休眠唤醒的问题,在笔记本中,休眠唤醒是一个基本功能,如果连休眠唤醒都没有,就失去了笔记本…

Volatile内存语义以及如何正确使用

目录 语义描述 重排序规则 JMM如何实现volatile语义 如何正确使用volatile变量 语义描述 写语义&#xff1a;当写一个volatile变量时候&#xff0c;JMM会把该线程对应的本地内存的共享变量直接刷新到主内存中。 读语义&#xff1a;当读一个volatile变量的时候。JMM会把该线…

分布式锁主动续期的入门级实现-自省 | 简约而不简单

一、背景 如果某个客户端获得锁之后处理时间超过最大约定时间&#xff0c;或者持锁期间内发生了故障导致无法主动释放锁&#xff0c;其持有的锁也能够被其他机制正确释放&#xff0c;并保证后续其它客户端也能加锁&#xff0c;整个处理流程继续正常执行。 简单解释一下&#xf…

LLeetCode题目笔记——6258. 数组中最长的方波

文章目录题目描述题目难度——中等方法一&#xff1a;一次遍历哈希代码Python暴力代码Python一次遍历总结题目描述 这是这周周赛的第二题&#xff0c;本来想是不是双指针的解法&#xff0c;但想半天没想出来咋用双指针&#xff0c;就想到了哈希。 给你一个整数数组 nums 。如果…

PostgreSQL数据库TPCC测试,Banchmarksql 5.0部署详解

1 BenchmarkSQL安装部署 1.1 部署Java环境 首先使用java - version查看是否已有 Java环境&#xff08;下图是有的情况&#xff09; 需要注意的是&#xff0c;虚拟机中默认的JDK貌似是不行的哦&#xff0c;请参考下面链接中的博文&#xff0c;教你怎么卸载重装 1.1.1 若没有J…