springboot学习(10)(自定义starter)(自定义mybatis的starter)(解决:java:错误:不支持发行版本?)

news2024/11/13 14:35:43

目录

一、引言

(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,照着自己定义就行。
  • 我们可以根据mybatisstarter的学习,一般情况,起步依赖会有两个工程组成。一个是:"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的步骤总结

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

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

相关文章

SQL各子句的执行顺序

FROM 、WHERE 、GROUP BY 、HAVING、 SELECT、ORDER BY 、LIMIT 执行顺序如下&#xff1a; FROM 子句&#xff1a;确定查询的基础表和视图。 WHERE 子句&#xff1a;基于指定的条件过滤记录。 GROUP BY子句&#xff1a;按指定的列分组结果集中的记录。 HAVING子句&#xff…

网上订餐新体验:SpringBoot技术驱动

1 绪论 1.1 研究背景 随着互联网技术的快速发展&#xff0c;网络时代的到来&#xff0c;网络信息也将会改变当今社会。各行各业在日常企业经营管理等方面也在慢慢的向规范化和网络化趋势汇合[13]。电子商务必将成为未来商务的主流&#xff0c;因此对于餐饮行业来说&#xff0c;…

Spring2~~~

注解配置Bean Spring的 IOC 容器检查到注解就会生成对象&#xff0c;但这个注解的具体含义不会识别 配置自动扫描的包 <!--配置容器要扫描的包1. component-scan 要对指定包下的类进行扫描, 并创建对象到容器2. base-package 指定要扫描的包3. 含义是当spring容器创建/初始…

类和对象(中)- C++

个人主页点这里~ 1. 类的默认成员函数 在C中&#xff0c;当你定义一个类时&#xff0c;即使没有显式地声明它们&#xff0c;编译器也会为该类生成一些默认成员函数。这些默认成员函数在特定情况下非常有用&#xff0c;尤其是当你进行对象拷贝、赋值、销毁或动态内存管理时。 …

BatchUpdateException 问题

我们在使用 statement 的 batch api 时、每 20 条数据作为一个事务提交、如果其中一条数据有问题 我们想知道哪一条数据有问题、那么我们可以通过捕获的 BatchUpdatedException 获取到 我们插入 100 条数据、第 21 条和第 41 条是非法数据、会插入失败的 看看日志打印 看看…

函数指针学习

认识函数指针&#xff1a; 函数指针的用处&#xff1a; 回调函数&#xff08;以函数指针为参数的参数&#xff09; 定义带标签的结构体 typedef struct mode { int data; } Node; 标签&#xff08;mode&#xff09;: mode 是结构体的标签名。在这种定义中&#xff0c;mo…

前端:Vue3学习-2

前端:Vue3学习-2 1. vue3 新特性-defineOptions2. vue3 新特性-defineModel3. vue3 Pinia-状态管理工具4. Pinia 持久化插件 -> pinia-plugin-persistedstate 1. vue3 新特性-defineOptions 如果要定义组件的name或其他自定义的属性&#xff0c;还是得回归原始得方法----再…

Codigger 携手 Jupyter:革新数据科学与编程体验

在现今的数字化时代&#xff0c;数据科学正在多个领域内如日中天地发展。数据分析和数据挖掘需求无处不在&#xff0c;对数据的理解与运用&#xff0c;成为许多企业及科研团队取得成功的重要因素。在这个大背景下&#xff0c;Jupyter 项目以其独特的设计理念和强大功能&#xf…

k8s API资源对象ingress

有了Service之后&#xff0c;我们可以访问这个Service的IP&#xff08;clusterIP&#xff09;来请求对应的Pod&#xff0c;但是这只能是在集群内部访问。 要想让外部用户访问此资源&#xff0c;可以使用NodePort&#xff0c;即在node节点上暴漏一个端口出来&#xff0c;但是这…

UNITY UI简易反向遮罩

附带示例资源文件&#xff1a;https://download.csdn.net/download/qq_55895529/89726994?spm1001.2014.3001.5503 大致效果&#xff1a; 实现思路:通过ui shader的模板测试功能实现 通过让想要被突出显示的物体优先渲染并写入模板值,而后再让黑色遮罩渲染并判断模板值进行渲…

机试算法模拟题 服务中心选址

题目描述 一个快递公司希望在一条街道建立新的服务中心。公司统计了该街道中所有区域在地图上的位置&#xff0c;并希望能够以此为依据为新的服务中心选址&#xff1a;使服务中心到所有区域的距离的总和最小。 给你一个数组positions&#xff0c;其中positions[i] [left, ri…

单项链表的原地反转

逻辑图如下所示&#xff1a; 只需要将需要反转的节点放到头节点位置即可&#xff0c; 使用两个指针一个指针指向需要反转的节点&#xff0c;另一个指针指向需要反转的指针的前驱节点&#xff08;其实也就是元链表的头节点&#xff09; 操作过程&#xff1a; 1 2 3 4 5 2 1 …

零基础国产GD32单片机编程入门(十五)CAN通讯详解及实战含源码

文章目录 一.概要二.CAN网络基本组成三.GD32单片机CAN结构与特点1.GD32F103单片机CAN基本结构图2.GD32F103单片机CAN基本特点 四.CAN协议帧格式五.GD32F103C8T6的CAN通讯波特率六.GDF103C8T6的CAN接收过滤器配置七.配置一个CAN通讯数据收发例程八.工程源代码下载九.小结 一.概要…

机器之心 | 挑战Transformer的Mamba是什么来头?作者博士论文理清SSM进化路径

本文来源公众号“机器之心”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;挑战Transformer的Mamba是什么来头&#xff1f;作者博士论文理清SSM进化路径 对 SSM 感兴趣的研究者不妨读一下这篇博士论文。 在大模型领域&#xff0c;…

仕考网:2025年公务员国考备考技巧

公务员考试掌握好备考技巧非常重要&#xff0c;尤其是国考这种竞争比较激烈的考试&#xff0c;仕考网为大家分享一些备考技巧&#xff0c;希望能对大家有所帮助。 1. 在提升行测分数时&#xff0c;可以采用大量的练习题、整理题以及关注往年核心考点的方式。无论处于准备过程的…

JsonPath全英文文档学习

JsonPath全英文文档学习 1、文档地址2、引入依赖3、浏览翻译问题修复4、文档学习4.1、Operator4.2、Functions4.3、Filter 运算符4.4、json示例 5、实战5.1、获取json数组下的多个元素5.2、获取json数组下的多个元素&#xff08;循环遍历时无元素自动占位&#xff09;5.3、获取…

面了阿里大模型算法岗,出门秒挂。。。

最近这一两周看到不少互联网公司都已经开始秋招提前批面试了。 不同以往的是&#xff0c;当前职场环境已不再是那个双向奔赴时代了。求职者在变多&#xff0c;HC 在变少&#xff0c;岗位要求还更高了。 最近&#xff0c;我们又陆续整理了很多大厂的面试题&#xff0c;帮助一些…

基于springboot+enum配置化实践

前言 Springboot/Springcloud作为微服务开发的经典框架&#xff0c;我想任何一个developer不会排斥。同时&#xff0c;市场越来越多的业务开发均围绕Springboot/Springcloud而展开&#xff0c;也让它成为Java开发的“硬通货”。 基于Spring&#xff0c;诸多低代码的平台的活跃…

基于SpringBoot的校园跑腿系统+LW参考示例

系列文章目录 1.基于SSM的洗衣房管理系统原生微信小程序LW参考示例 2.基于SpringBoot的宠物摄影网站管理系统LW参考示例 3.基于SpringBootVue的企业人事管理系统LW参考示例 4.基于SSM的高校实验室管理系统LW参考示例 5.基于SpringBoot的二手数码回收系统原生微信小程序LW参考示…

spring项目整合log4j2日志框架(含log4j无法打印出日志的情况,含解决办法)

Spring整合Log4j2的整体流程 1&#xff09;导入log4j-core依赖 <!--导入日志框架--><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.20.0</version></dependenc…