目录
一、创建 mysql-spring-boot-starter 项目
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 项目。