首页 > 其他分享 >Springboot自定义starter

Springboot自定义starter

时间:2023-11-20 22:12:08浏览次数:37  
标签:Springboot 自定义 spring boot private mybatis public starter

Springboot自定义sarter

这里通过自定义mybatis的starter来简单进行分析理解

步骤:

  • 创建dmybatis-spring-boot-autoconfigure模块,提供自动配置功能,并定义配置文件META-INF/spring/xxx.imports

  • 创建dmybatis-spring-boot-starter模块,在starter中引入自动配置模块

    创建项目:

1.autoconfigure模块

在dmybatis-spring-boot-autoconfigure模块的pom.xml中引入对应的依赖坐标

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <version>3.1.4</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
            <version>3.1.5</version>
        </dependency>

        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.13</version>
        </dependency>

        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>3.0.2</version>
        </dependency>

在当前模块中创建config包,包内创建配置类MyBatisAutoConfig,包结构如下:

在类上方添加注解,同时注入SqlSessionFactoryBeanMapperScannerConfigure对象

具体代码如下:

@AutoConfiguration
public class MyBatisAutoConfig {

    //SqlSessionFactoryBean
    @Bean
    public SqlSessionFactoryBean sqlSessionFactoryBean(DataSource dataSource){
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(dataSource);
        return sqlSessionFactoryBean;
    }

    //MapperScannerConfigure
    @Bean
    public MapperScannerConfigurer mapperScannerConfigurer(BeanFactory beanFactory){
        MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
        //扫描的包:启动类所在的包及其子包
        List<String> packages = AutoConfigurationPackages.get(beanFactory);
        String p = packages.get(0);
        mapperScannerConfigurer.setBasePackage(p);

        //扫描的注解
        mapperScannerConfigurer.setAnnotationClass(Mapper.class);
        return mapperScannerConfigurer;
    }


}

新建resources包,在包下新建.imports配置文件

配置文件中配置:

com.qym.config.MyBatisAutoConfig
2.starter模块:

在sterter模块的pom.xml文件中引入依赖:

<dependency>
      <groupId>com.qym</groupId>
      <artifactId>dmybatis-spring-boot-autoconfigure</artifactId>
      <version>1.0-SNAPSHOT</version>
    </dependency>

同时为了在引入starter以来后,对相应的依赖进行排除等操作,为了更方便操作,所以将starter中的相应依赖引入(官方推荐做法)

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <version>3.1.4</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
            <version>3.1.5</version>
        </dependency>

        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.13</version>
        </dependency>

        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>3.0.2</version>
        </dependency>

将starter中的无关文件删除

3.测试自定义starter类:

新建测试模块并在pom.xml中引入自定义syarter依赖

        <dependency>
            <groupId>com.qym</groupId>
            <artifactId>dmybatis-spring-boot-starter</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

编写简单的用户查找方法:

UserController.class

@RestController
public class UserController {

    @Autowired
    private UserService userService;

    @RequestMapping("/getById")
    public User getById(Integer id) {
        return userService.getById(id);
    }

}

UserService接口

public interface UserService {

    public User getById(Integer id);
}

UserServiceImpl实现类

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserMapper userMapper;

    @Override
    public User getById(Integer id) {
        return userMapper.getById(id);
    }
}

UserMapper接口

@Mapper
public interface UserMapper {

    @Select("select * from user where id = #{id};")
    public User getById(Integer id);

}

user实体类

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {

    private Integer id;
    private String username;
    private String password;
    private String phone;
    private String info;
    private Integer status;
    private Integer balance;
    private LocalDateTime createTime;
    private LocalDateTime updateTime;

}

启动类Springboot3QuickstartApplication

@SpringBootApplication
public class Springboot3QuickstartApplication {

    public static void main(String[] args) {
        SpringApplication.run(Springboot3QuickstartApplication.class, args);
    }

}

运行结果:

由于没有开启驼峰命名,所以创建时间和更新时间查询出来时null。

通过测试案例可以发现所配置的mybatis的starter启动没有问题

标签:Springboot,自定义,spring,boot,private,mybatis,public,starter
From: https://www.cnblogs.com/qymblogs/p/17845022.html

相关文章

  • day131- springboot 的配置文件yaml的用法
    springboot的配置文件yaml的用法yaml文件同properties文件一样,适合用来做数据为中心的配置文件基本语法key:value;kv之间有空格大小写敏感使用缩进表示层级关系缩进不允许使用tab,只允许空格缩进的空格数不重要,只要相同层级的元素左对齐即可'#'表示注释字......
  • 基于Springboot宠物商城网站系统-计算机毕业设计源码+LW文档
    摘 要如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统宠物商城网站系统信息管理难度大,容错率低,管理人员处理数据费工费时,所以专门为解决这个难题开发了一个宠物商城网......
  • Android系统开发 Android10版本自定义系统版本号
    前言  framework开发,此博客基于Android10版本,实现自定义系统版本号。找到修改位置需要修改的关键文件是buildinfo.sh搜索一下文件找到要改的目标文件这里建议将这个文件拷贝出来修改,各自的编译环境不同,拷贝或者传输文件的方式不同,这里各自发挥。下面是我在wsl里把文件拷......
  • Vue自定义创建项目
    基于VueCli自定义创建项目顺序:安装脚手架vuecreate项目名选择自定义Babel/Router/CSS/LinterVue2.xVueRouterhash模式CSS预处理ESlint:Standard&LintonSave配置文件dedicatedconfigfiles......
  • wpf 自定义按钮模板
    <ButtonWidth="300"Height="100"Content="自定义按钮"Background="Bisque"FontSize="23"Foreground="Orchid"><Button.Template><ControlTemplateTargetType=&qu......
  • 痞子衡嵌入式:在IAR开发环境下手动拷贝自定义程序段到RAM中执行的方法
    大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家分享的是IAR下手动拷贝自定义程序段到RAM中执行的方法。在痞子衡旧文《IAR下RT-Thread工程自定义函数段重定向失效分析》里,我们知道IAR链接器处理自定义程序段重定向是有一些限制的,只要用户重写了底层__low_l......
  • DHorse发布SpringBoot项目
    前言在介绍DHorse的操作之前,先来介绍一下使用k8s发布应用的步骤,以SpringBoot应用为例进行说明。1.首先从代码仓库下载代码,比如GitLab;2.接着进行构建,比如使用Maven;3.如果要使用k8s作为编排,还需要把步骤2产生的包制作成镜像,比如使用Docker;4.上传步骤3的镜像到远程仓库,比如Harho......
  • linux云服务器部署springboot项目
    第一次在linux云服务器上部署项目,经过非常坎坷的摸索之后终于部署完成了进行项目部署的一些默认条件默认你有一台linux操作系统的云服务器,博客中演示的linux的发行版本是centos7其次博客中部署的是gitee上的SpringBoot项目,后端打包完的格式是zip格式,默认你也是博客中前端的部署是使......
  • Docker自定义网段实现容器间的互访【开发环境中】
    我们都知道docker容器之间是互相隔离的,不能互相访问,但如果有些依赖关系的服务要怎么办呢,所以自定义网段实现容器间的互访。Docker安装好之后默认会创建三个虚拟网卡,可以使用dockernetworkls命令来查看,三个虚拟网卡和VMware的类似。bridge是默认的网卡,网络驱动是bridg......
  • SpringBoot集成LDAP认证登录
    Maven依赖<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.......