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

本文会以 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 文件。

  • 业务编码调用。

 

相关依赖 


  org.springframework
  spring-context
  5.2.5.RELEASE


  org.mybatis
  mybatis
  3.5.1


  org.mybatis
  mybatis-spring
  1.3.0


  mysql
  mysql-connector-java
  5.1.9


  xxx
  xxxx
  xxx

...

 

mybatis-config.xml 配置文件




 
   
    
        
    
 
    
        
    
    
        
        
        
    
    
        
        
    

    
        
    

    
        
        
        
        
    

    
         ...
    
 
    

业务编码调用

@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 依赖

 


    org.mybatis.spring.boot
    mybatis-spring-boot-starter
    2.1.1

 

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 文件


@Mapper
 public interface XXXMapper {
     List 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 中。

你可能感兴趣的:(spring,boot,mybatis,java)