目录
一、引言
(1)为什么要学习自定义starter?
(2)如何自定义starter?
二、制作一个自定义mybatis-starter
(1)需求
(2)步骤
(3)开始实操
【1】创建"dmybatis-spring-boot-autoconfigure"模块
【2】创建"dmybatis-spring-boot-starter"模块
【3】先在"dmybatis-spring-boot-autoconfigure"里面提供自动配置的功能
【4】现在处理"dmybatis-spring-boot-starter"模块(工程)
【5】开始最后清理并完成
【6】测试一下,看自己自定义的starter能否代替mybatis提供的起步依赖去使用
三、总结
(1)java:错误:不支持发行版本 ?解决方法
(2)回顾刚刚自定义starter的步骤总结
一、引言
(1)为什么要学习自定义starter?
- 在实际开发中,经常会定义一些公共组件,提供给各个项目团队使用。而在SpringBoot的项目中,一般会将这些公共组件封装为SpringBoot的starter。
- 在Spring Boot中,starter又被称为起步依赖。starter是Spring Boot项目中的一个核心概念,它极大地简化了项目的搭建和配置过程。具体来说,starter可以理解为一组预定义的依赖项集合。
- 例如Web应用开发。通过引入"
spring-boot-starter-web
",开发者可以快速搭建基于Spring MVC的Web应用程序。(2)如何自定义starter?
- 可以参考别人定义的starter,照着自己定义就行。
- 我们可以根据mybatis的starter的学习,一般情况,起步依赖会有两个工程组成。一个是:"xxx-autoconfigure",用来提供自动配置功能。另外一个是用来提供:"xxx-starter",用来提供依赖管理功能。会在starter中引入autoconfigure,将来别人在使用的时候,只要引入starter就行了,相当于将autoconfigure也就引入进来了——>当我们把这两个工程提供好,自定义的starter的制作好了。
二、制作一个自定义mybatis-starter
(1)需求
- 自定义mybatis的starter。也就是我们不使用mybatis提供的起步依赖,自己去尝试制作一个。
(2)步骤
- 第一步。创建"dmybatis-spring-boot-autoconfigure"模块(工程),提供自动配置功能。并自定义配置文件"META-INF/spring/xxx.imports"(这个在上一篇自动配置中将到过,这个配置文件springboot需要其自动读取)。然后工程名是为了与mybatis提供的起步依赖进行区分一下。
- 第二步。创建"dmybatis-spring-boot-starter"模块,并在starter中引入自动配置模块(也就是上面的"xxx-autoconfigure")
(3)开始实操
【1】创建"dmybatis-spring-boot-autoconfigure"模块
- 打开IDEA,找到file——>打开ProjectStructure(模块结构)——>选择Modules——>再点击"+"号——>点击new Module
- 首先我们上面提到的模块"dmybatis-spring-boot-autoconfigure"是一个普通的Maven工程,所以选择创建Maven工程,最后点击创建——>点击应用即可
【2】创建"dmybatis-spring-boot-starter"模块
- 还是和上面一样的操作,file——>项目结构——>模块(Modules)——>new Module,这次也是创建一个Maven的工程
【3】先在"dmybatis-spring-boot-autoconfigure"里面提供自动配置的功能
- 如果在这里要提供mybatis的自动配置功能的,首先就要引入对应的依赖。不清楚——>去查看mybatis提供的起步依赖,看看别人引入了哪些坐标
- 查看在这个起步依赖中,mybatis它引入了哪些jar包——>"xxx-spring-boot-starter"(springboot核心起步依赖)、"xxx-jdbc的起步依赖"、"mybatis-spring-boot-autoconfigure"(mybatis提供的自动配置的工程)、"mybatis的坐标"、"mybatis与spring整合的坐标"。——>所以待会除了"xxx-autoconfigure"不需要引入它的,其它都需要引入,因为这个"xxx-autoconfigure"是我们自己去提供,不需要去引入它提供的坐标
- 打开其下的.pom文件,依次添加坐标(导入依赖),注意新版的springboot是"spring-boot-starter-jdbc"。
- 上面的坐标真正引入进来后,下面去写自动配置类。去src——>main——>com.feisi包下new一个新的软件包——>包名(config)——>再创建一个类"MybatisAutoConfig"
- 接下来在这个类上面添加一个注解@AutoConfiguration
- 接下来需要在类中提供两个方法。分别用来注入"SqlSessionFactoryBean"与"MapperScannerConfigurer"这个两个对象
- 下面这行代码会给我们创建一个"SqlSessionFactory"这个工厂,而这个工厂是用来创建"SqlSession"的,而"SqlSession"是 MyBatis 框架中的一个核心接口,它代表了和数据库进行交互的会话,是会话对象。将来要连接数据库——>所以要指定要连接哪个数据库——>之前在pom文件中已经引入了一个jdbc的起步依赖,这个jdbc起步依赖会自动的往Ioc容器当中自动注入一个"datasource"(数据源对象),若需要使用数据源就在方法的参数声明对应类型的参数即可"(DataSource dataSource)"——>然后接着只要把dataSource注入到"SqlSessionFactory",它就直到要连接谁了。
- 然后同样的处理"MapperScannerConfigurer"。
- 在返回这个对象的时候,还需要这个对象设置一些属性
- 我们要知道——>"mapperScanner"是干啥的?——>用来进行mapper扫描的,所以要告诉扫描哪个包、以及扫描哪个注解——>所以继续完成代码的补充
- 回想springboot工程会自动的扫描启动类所在的包及其子包,所以这里也设置为启动类所在包及其子包。那以后咋知道启动类所在的包和其子包呢?——>springboot提供了对应的API——>在pom文件中我们之前是引入了springboot的核心起步依赖,这里面给我们提供了对应的API
- 这个bean工厂其实就是上面的"SqlSessionFactory"这个工厂对象
- 看弹幕的解释,这里博主学的不深,现在还不太理解(spring整合mybatis的时候配置了这两个bean,mapper扫描就是把sqlsession工厂bean放进去然后生成接口list完成aop。mybatis一共就两个特点。第一点是,链接数据库控制增删改查;第二个特点是,,可以通过定义的接口,来自动创建一个实现类,执行sql语句)
- 我们注意:在我们的这些方法中,需要用哪些对象,就需要在方法中声明即可,将来springboot会帮我们自动注入。所以在参数里声明一个BeanFactory。且这个get()方法会返回一个集合,这个集合里面其实放的就是包名,因为启动类所在的包名不只有一个——>然后只要获取这个集合的最上面的那一个包名即可——>用集合.get(0)即可
- 接着设置扫描的注解(都是mapper注解)
- 最后在return回去设置好的对象(后面配置文件调好,就不会报错了!因为你弄了一个自动配置注解还有一个@Bean注解,它springboot没有配置文件里面的全类名,就会报错这个Bean扫描)
- 接下来我们要注意现在写好的自动配置类,凭什么能够被springboo读取到,所以我们要去配置文件里面去声明这个自动配置类的"全类名"——>所以提供配置文件"xxx-imports(dear imports)"——>因为名字太长了,直接去抄一下
- 回到自己的"dmybatis-spring-boot-autoconfigure"工程里面。去src——>main——>新建一个resources目录
- 再去resources目录下新建一个目录META-INF(这个名字千万不能改),再新建一个目录"spring",然后新建一个文件,把上面在库里面copy的配置文件名填进去即可
- 然后在配置文件中,写上我们最上面写的自动配置类的全类名。再回到配置文件中CTRL+v。现在这个"dmybatis-spring-boot-autoconfigure"工程已经准备好了,已经具备自动配置的功能了
【4】现在处理"dmybatis-spring-boot-starter"模块(工程)
- 而starter这个工程是只提供依赖管理的功能。所以去pom文件——>引入我们上面写好的模块"dmybatis-spring-boot-autoconfigure"的依赖
- 而根据官方的写法推荐,我们还需要引入模块"dmybatis-spring-boot-autoconfigure"中它引入的依赖。因为将来要使用的,是直接引入这个"dmybatis-spring-boot-starter",然后如果需要对这里面所管理的依赖进行一个排除,所以就会更加方便一点。(直接去复制粘贴就行了)所以最终的依赖就引入完毕了,如下
【5】开始最后清理并完成
- 最终这个自定义的起步依赖就完成好了
【6】测试一下,看自己自定义的starter能否代替mybatis提供的起步依赖去使用
- 首先用的还是之前学习工程"springboot-quickstart",它里面实现的就是查询数据库中对应id的所有信息。具体想了解,可以看之前的博客,查看该工程的整体创建流程
SpringBoot学习(5)(springboot整合mybatis)-CSDN博客文章浏览阅读1.1k次,点赞17次,收藏18次。springboot工程如何快速的整合mybatis的基础用法与案例分析!(pom文件引入起步依赖、yml文件书写简单配置信息...)https://blog.csdn.net/m0_74363339/article/details/141894888?spm=1001.2014.3001.5501
- 这里展示一下controller层、启动类的代码(具体去之前博客看)
- 这里首先我们把pom文件之前引入的mybatis起步依赖换成刚刚自己自定义的starter
- 记得刷新Maven,然后记得启动数据库的连接。测试成功!!!
三、总结
(1)java:错误:不支持发行版本 ?解决方法
(仅供参考!)
- 因为Maven的工程,默认依赖的jdk版本是5,太低了,不支持。可以去pom文件配置一个编译插件??代码如下,将这个添加到依赖<dependencies>下面即可,两个自定义的工程模块的pom文件都复制一份进去,然后刷新Maven即可。这里面的版本号,都选择最新的即可(编译器提示的)。
- 解释一下稍微。<configuration>配置,配置两个东西——><source>源的版本:配置17,和boot工程版本一致。
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.13.0</version> <configuration> <source>17</source> <target>17</target> </configuration> </plugin> </plugins> </build>
(2)回顾刚刚自定义starter的步骤总结