springboot学习(自定义starter)
前言
为什么要学习自定义starter?
- 满足实际开发的需要
怎么自定义 starter
1 首先我们可以参考以下别人自定义的starter: mybatis 起步依赖
如下图所示,我在springboot 项目的pom文件,引入mybatis 起步依赖,可以发现在外部库可以看到两个模块:1 自动配置模块 2 自定义starter 模块
功能
两者关系:往往是在starter模块中引入自动配置模块
demo(案例)
需求:自定义 mybatis的starter
自动配置模块
步骤
创建dbmybatis-spring-boot-autoconfigure模块,提供自动配置功能,并自定义配置文件META-INF/spring/xxx.imports具体步骤
0 创建 一个空的项目 选择添加模块,分别命名为 自动配置模块,starter模块
1 模仿 mybatis 起步依赖 ,添加我们需要的以些依赖
- 可以发现,除了我标示的,其他的依赖都需要向 我们自定义的自动配置模块 pom文件添加
代码:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <version>3.4.3</version> </dependency> <dependency> <groupId> org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> <version>3.4.3</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.14</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>3.0.3</version> </dependency>
2 写一个自动配置类
样图
代码:
package com.it.heima.config; import org.apache.ibatis.annotations.Mapper; import org.mybatis.spring.SqlSessionFactoryBean; import org.mybatis.spring.mapper.MapperScannerConfigurer; import org.springframework.beans.factory.BeanFactory; import org.springframework.boot.autoconfigure.AutoConfiguration; import org.springframework.boot.autoconfigure.AutoConfigurationPackages; import org.springframework.context.annotation.Bean; import javax.sql.DataSource; import java.util.List; @AutoConfiguration public class MybatisAutoConfig { // SqlSessionFactoryBean @Bean public SqlSessionFactoryBean sqlSessionFactoryBean(DataSource dataSource){ SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean(); sqlSessionFactoryBean.setDataSource(dataSource); return sqlSessionFactoryBean; } //MapperScannerConfigurer @Bean public MapperScannerConfigurer mapperScannerConfigurer(BeanFactory beanFactory){ MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer(); // 指定扫描的包 List<String> packages = AutoConfigurationPackages.get(beanFactory); String s = packages.get(0); mapperScannerConfigurer.setBasePackage(s); // 扫描的注解 mapperScannerConfigurer.setAnnotationClass(Mapper.class); return mapperScannerConfigurer; } }
3 向 resources文件夹添加.import 配置文件【存储 自动配置类的全类名】
格式如下图所示:
starter模块
步骤
创建 dmybatis-spring-boot-starter模块,在starter中引入自动配置模块
1 向 starter 模块的pom文件中,引入刚刚写的自动配置模块 和自动配置模块需要的以些依赖
代码:
<dependencies> <dependency> <groupId>com.it.heima</groupId> <artifactId>dbmybatis-spring-boot-autoconfigration</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <version>3.4.3</version> </dependency> <dependency> <groupId> org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> <version>3.4.3</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.14</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>3.0.3</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies>
完成之后当我们引入 starter 模块时,就相当于我们平时使用的mybatis起步依赖
创建第三个模块作为 springboot项目:在创建时,引入 springWeb 依赖【作为与前端进行交互】
demo(案例):springboot整合mybatis
目的:通过浏览器,通过输入查询参数,查询user 表的信息
项目准备
1 tb_user 数据表 和User 实体类
- tb_user 数据表
- User 实体类
2 pom 文件添加 之前准备好的starter 模块
<dependency> <groupId>com.it.heima</groupId> <artifactId>dbmybatis-spring-boot-starter</artifactId> <version>1.0-SNAPSHOT</version> </dependency>
3 yml 配置文件书写 连接数据库的信息
正文
项目结构
mapper 持久层
- UserMapper
controller控制层
- UserController
service 逻辑处理层
UserService 接口- User findById(Integer userId);方法
impl-接口的实现子包-UserServiceImpl.java
启动类:SpringMybatisApplication 类
运行截图
浏览器访问 数据库