SpringBoot Starter 作用及原理,你真的清楚吗?

news/2024/10/31 1:32:54/

本文会以 mybatis 为例,通过对比 mybatis-spring 和 mybatis-spring-boot-starter 代码示例,了解 Starter 的作用。并对 mybatis-spring-boot-starter 进行简单剖析,了解 Starter 原理。

什么是 Starter

 

大家都知道基于 SpringBoot 开发项目可以简化 Spring 应用的搭建以及开发过程,提高程序员开发效率,这是由于其“约定大约配置”的策略及其自动装配的特点。

约定大约配置是指 SpringBoot 指定了特定的方式进行配置(application.properties/yam/yaml),开发人员不需要像在 Spring 框架开发时定义配置文件。

自动装配是指在使用某个组件或框架时需要引用其依赖、配置类、配置文件等工作时,SpringBoot 帮我们做了这些工作。

那跟 Starter 有关系吗?答案是:有!Starter 就是自动装配的具体实现,其就是一个 maven 项目,对某个组件的依赖、配置进行管理。通过导入 “Starter” 模块更容易使用这个组件。

Starter 的作用

 

我们通过对比 mybatis-spring 和 mybatis-spring-boot-starter 代码示例,了解 Starter 的作用。

spring 整合组件

先看下在 spring 项目中如何使用 mybatis 的。大概有以下几个步骤:

  • 引入 spring、mybatis、jdbc 等相关依赖。

  • 创建 mybatis-config.xml 配置文件。

    • 声明数据源 DataSource。

    • 声明 SqlSessionFactoryBean

    • 声明 MapperScannerConfigurer

    • 声明等等配置。

  • 编写 xxxMapper.xml 及 xxMapper.java 文件。

  • 业务编码调用。

 

相关依赖 

<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.2.5.RELEASE</version>
</dependency>
<dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.1</version>
</dependency>
<dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>1.3.0</version>
</dependency>
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.9</version>
</dependency>
<dependency><groupId>xxx</groupId><artifactId>xxxx</artifactId><version>xxx</version>
</dependency>
...

 

mybatis-config.xml 配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><context:property-placeholder location="classpath:jdbc.properties"/><settings><setting name="logImpl" value="STDOUT_LOGGING"/></settings><mappers><package name="com.xxx.dao"/></mappers><bean id="myDataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"><property name="url" value="${jdbc.url}"/><property name="username" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/></bean><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource" /><property name="mapperLocations" value="classpath:xxxx/*.xml"/></bean><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="com.xxx.dao"/></bean><bean class=".xxxxxx.xxx"><!-- 指定SqlSessionFactory对象的名称 --><property name="sqlSessionFactoryBeanName" value="factory"/><!-- 指定基本包,dao接口所在的包名 --><property name="basePackage" value="com.xxx.dao"/></bean><bean class=".xxxxxx.xxx">...</bean></configuration>

业务编码调用

@Autowired
private XxxDao xxxDao;xxxDao.insert(xx);

作为一个开发人员是否觉得很麻烦?答案一定是的,如果稍不留神少了哪个配置或依赖,那就排查问题吧😄。

 

spring-boot 整合组件

这时候我们如果用基于 SpringBoot 开发,那 mybatis-spring-boot-starter 就可以帮助我们做这些事。 

那我们继续看下在 SpringBoot 项目中如何使用 Mybatis 的。大概有以下几个步骤:

  • 引入 mybatis-spring-boot-starter 依赖。

  • application.properties 文件中添加相关配置。

  • 编写 xxxMapper.xml 及 xxMapper.java 文件。

  • 业务编码调用。

引入 mybatis-spring-boot-starter 依赖

 

<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.1.1</version>
</dependency>

 

application.properties 文件中添加相关配置。

spring.datasource.username=x********spring.datasource.password=********spring.datasource.url=********spring.datasource.driver-class-name=********mybatis.mapper-locations=classpath:mapper/*.xml

 编写 xxxMapper.xml 及 xxMapper.java 文件


@Mapperpublic interface XXXMapper {List<XXX> list(xxx);}

 业务编码调用


@Autowired
private XxxDao xxxDao;xxxDao.insert(xx);

 

通过以上的代码比较可以明显的感觉到利用 Starter 后,我们编写的代码更少了,特别是 1、2 步骤,这就是 Starter 的作用。mybatis-spring-boot-starter 帮助我们做了以下几件事:

  • 整合了组件相关的依赖,使我们直接引入 mybatis-spring-boot-starter 依赖即可,也避免了版本冲突问题。

  • 自动发现存在的 DataSource,做到自动配置。

  • 帮我们创建并注册SqlSessionFactorySqlSessionTemplate等,减少了配置类、配置项。

  • 自动扫描映射器(Mapper),注入到 Spring Bean 中。


http://www.ppmy.cn/news/62554.html

相关文章

SpringBoot的yml多环境配置3种方法

目录 方式一&#xff1a;多个yml文件 步骤一、创建多个配置文件 步骤二、applicaiton.yml中指定配置 方式二&#xff1a; 单个yml文件 方式三&#xff1a;在pom.xml中指定环境配置 步骤一、创建多个配置文件 步骤二、在application.yml中添加多环境配置属性 步骤三、在po…

Java的自定义注解

java元注解和自定义注解的区别 Java的自定义注解是一种元数据&#xff0c;可以应用于类、方法、字段等程序元素上&#xff0c;以提供额外的信息或指示。 自定义注解包括注解声明、元注解、运行时处理器三个部分。注解声明指定了注解的名称、作用域、成员等信息&#xff1b;元注…

ElastaicSearch 查询

match_all&#xff1a;匹配所有 match&#xff1a;分词单个匹配 【分词包含query&#xff0c;就可以被检索到&#xff0c;类似contains包含】 multi_match&#xff1a;分词多个匹配 【任何一个分词包含query&#xff0c;就可以被检索到】 term&#xff1a;全词单个匹配 terms&a…

JSP企业电子投票系统(源代码+论文+开题报告+外文翻译+文献综述)

J2EE已经成为开发商创建电子商务应用的事实标准。正是认识到J2EE平台作为一种可扩展的、全功能的平台&#xff0c;可以将关键的企业应用扩展到任何Web浏览器上并可适合多种不同的Internet数据流、可连接到几乎任何一种传统数据库和解决方案、使企业经理根据多家企业所提供的产品…

QML信号与信号槽实践指南:轻松掌握现代软件开发的关键技术

这里写目录标题 &#xff08;一&#xff09;QML简介1.1 QML概述1.2 QML的基本语法1.3 QML与C的交互 &#xff08;二&#xff09;QML信号基本概念2.1 QML中的信号2.2 QML信号的作用与优势 &#xff08;三&#xff09;QML信号槽基本概念3.1 QML中的槽3.2 QML信号槽的使用与实践 &…

石头科技2022年营收实现双位数增长,以技术实力打响创新价值战

近日&#xff0c;石头科技披露了2022年度财务报告&#xff0c;报告显示&#xff0c;在在较大内外部压力下&#xff0c;石头科技2022年营收依然实现双位数增长&#xff0c;且境内外销售收入平稳增长。 该公司在近年来不断完善其产品矩阵&#xff0c;目前已推出手持无线吸尘、商…

Java 反射浅析与使用

获取Class对象 加载class的方式 通过Class.forName(className) className&#xff1a;全类名(类包名类名)通过类名.class方法获取通过对象的getClass()方法获取 Class<?> aClass Class.forName("com.hww.test.Info");System.out.println("Class.forNa…

Word控件Spire.Doc 【文本框】教程(1):如何在 C 语言中设置 Word 文本框的内部边距

Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下&#xff0c;轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具&#xff0c;专注于创建、编辑、转…