• 【SpringBoot】idea创建SpringBoot项目及注解配置相关应用


    SpringBoot:


    约定大于配置 springboot == ss springboot的版本之间差异较大

    一、简言


    • 1、Spring Boot是Spring社区发布的一个开源项目,旨在帮助开发者快速并且更简单的构建项目。
    • 2、使用Spring Boot很容易创建一个独立运行的项目:脱离自己配置服务器,内部服务器运行
    • 3、使用Spring Boot创建准生产级别的基于Spring框架的项目:企业级发布型项目
    • 4、使用SpringBoot可以不用或者只需要很少的配置文件

    二、SpringBoot作用


    Spring Boot框架,其功能非常简单,便是帮助我们实现自动配置。我们都知道Spring Boot框架的核心是自动配置。只要有相应的jar包,Spring就会帮助我们实现自动配置,而无需像以前我们使用spring框架一样要做很多配置。当默认配置不能满足我们要求的时候,我们能够用自己的配置来替换这些自动的配置类。此外,上面我们也提到Spring Boot内嵌了web应用容器,除此之外还集成了系统监控等功能,这些都可以帮助我们快速搭建企业级的应用程序并使用。

    三、核心功能


    • 1、可以不依赖tomcat等外部容器来独立运行的web项目,springboot的优点是能够以jar包的形式运行。
    • 2、嵌入式的Servlet容器:我们不需要像以前那边先打个war包,然后再运行,在springboot看来这些都是多余的,我们可以选择他内嵌的tomcat、Jetty或者Undertow等容器来直接运行。
    • 3、使pom文件配置更简化:我们只需要在pom文件中添加starter-web依赖即可,无需像以前一样引入很多依赖而造成容易漏掉(自动配置bean)。
    • 4、能够生产环境中直接使用性能指标、健康检查和应用信息等。
    • 5、springboot不需要任何xml文件配置而能实现所有的spring配置

    四、创建springBoot项目


    1、新建SpringBoot(maven基础下)

    创建SpringBoot有两种方式:

    • 一种是从Service URL:start.aliyun.com创建
      • 从中央仓库进行下载,下载速度慢
    • 另一种是从:Service URL:https://start.spring.io/创建
      • 阿里云镜像仓库

    服务地址改变:将网址复制:

    在这里插入图片描述

    因为idea版本不同创建方式显示页面会有不同,但方法都一样,例如2018 IDEA:

    在这里插入图片描述

    2022版 idea 正常创建:

    在这里插入图片描述

    2、next—选版本导jar包

    在这里插入图片描述

    • 建完maven项目一般仓库还会是在C盘,记得Settings–maven–把库改为自己的(懂得都懂~~)
    3、创建后的pom.xml
    
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0modelVersion>
        <parent>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-parentartifactId>
            <version>2.1.17.RELEASEversion>
            <relativePath/> 
        parent>
        <groupId>com.JulesgroupId>
        <artifactId>springBoot01artifactId>
        <version>0.0.1-SNAPSHOTversion>
        <name>springBoot01name>
        <description>springBoot01description>
    
        <properties>
            <java.version>1.8java.version>
            <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8project.reporting.outputEncoding>
            <spring-boot.version>2.1.17.RELEASEspring-boot.version>
        properties>
    
        <dependencies>    
    	    
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-webartifactId>
            dependency>
            
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-testartifactId>
                <scope>testscope>
            dependency>
        dependencies>
    
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.bootgroupId>
                    <artifactId>spring-boot-dependenciesartifactId>
                    <version>${spring-boot.version}version>
                    <type>pomtype>
                    <scope>importscope>
                dependency>
            dependencies>
        dependencyManagement>
        
    
        <build>
            <plugins>
                <plugin>
                    …………
                plugin>
                …………
            plugins>
        build>
    project>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61

    这段最重要:

        <parent>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-parentartifactId>
            <version>2.1.17.RELEASEversion>
            <relativePath/> 
        parent>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    此项目其他会使用的jar包

    
        <dependency>
            <groupId>mysqlgroupId>
            <artifactId>mysql-connector-javaartifactId>
            <version>5.1.44version>
        dependency>
    
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-jdbcartifactId>
        dependency>
          
        <dependency>
             <groupId>org.projectlombokgroupId>
             <artifactId>lombokartifactId>
         dependency>
    
         <dependency>
             <groupId>org.mybatis.spring.bootgroupId>
             <artifactId>mybatis-spring-boot-starterartifactId>
             <version>2.1.3version>
         dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    4、SpringBoot启动类

    在src—main—java中会生成下面的核心启动类,直接运行就会开启服务器

    @SpringBootApplication /*核心注解*/
    public class SpringBoot01Application {
        public static void main(String[] args) {
            SpringApplication.run(SpringBoot01Application.class, args);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述
    ==============若是不想用他的服务器可以配置自己的,后面(九)=============

    【核心注解@SpringBootApplication】

    • @SpringBootApplication注解是多个注解的合体,其中最重要的=======
      @SpringBootConfiguration是spring注解(启动tomcat时加载当前类)
      @EnableAutoConfiguration(实现自动装配)
      @ComponentScan(扫描service,controller层)
      • @SpringBootConfiguration 继承至@Configuration,其实两种功能一致,都是标注该类为配置类,
        读取启动类
      • @EnableAutoConfiguration 这个注解是SpirngBoot自动配置的核心所在,通过此注解,能所有符合自
        动配置条件的bean的定义加载到spring容器中。
      • @ComponentScan 该注解会扫描当前包及子包下面被纳入sping容器管理的类,相当于

    六、测试项目


    【先配置好第七步的application.yml中的配置】

    在这里插入图片描述

    1.项目构建:

    实体类省略……………后端代码:

    //dao层接口、service层接口
    
    //@Repository  //dao接口注解,如果不要在service的实现层会有一个报红,但不会影响项目执行
    public interface ProviderMapper {
        /**
         *
         * @param proName
         * @param pyl  偏移量
         * @param limit  页面容量
         * @return
         */
        public List<Provider> providerInfoList(
                @Param("proName") String proName,
                @Param("pyl") Integer pyl,
                @Param("limit") Integer limit
        );
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    
    DOCTYPE mapper
            PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.jules.springboot01.mapper.ProviderMapper">
    
        <select id="providerInfoList" resultType="com.jules.springboot01.pojo.Provider">
            select * from smbms_provider
            <where>
                <if test="proName != null and proName != ''">
                    and proName like concat('%',#{proName},'%')
                if>
            where>
            order by id desc limit #{pyl},#{limit}
        select>
    mapper>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    //service层实现
    @Service
    public class ProviderServiceImpl implements ProviderService {
        @Autowired
        private ProviderMapper providerMapper;  //前面说的报红就是这里,不影响
    
        public List<Provider> providerInfoList(String proName,Integer page, Integer limit) {
            //计算偏移量
            int pyl = (page-1)*limit;
            return providerMapper.providerInfoList(proName,pyl,limit);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    //controller层
    
    @Controller
    @ResponseBody
    @RequestMapping("/xxx")
    public class ProviderController {
    
        @Autowired
        private ProviderService providerService;
    
        @RequestMapping(value = "/providerInfoList",method = RequestMethod.GET)
        @ResponseBody
        public List<Provider> providerInfoList(String proName,Integer page, Integer limit){
            System.out.println("proName=="+proName);
            List<Provider> providers = providerService.providerInfoList(proName,1,10);
            return providers;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    2.数据源注入dao层—@MapperScan

    【到此speingBoot构建好了,项目创建完成,虽然数据库连接与创建数据源已完成,但是数据源注入dao层还没有完成】

    @MapperScan

    • 作用:指定要变成实现类的接口所在的包,然后包下面的所有接口在编译之后都会生成相应的实现类
    • 添加位置:是在Springboot启动类上面添加
    @SpringBootApplication
    @MapperScan("com.jules.springboot01.mapper")
    public class SpringBoot01Application {
    
        public static void main(String[] args) {
            SpringApplication.run(SpringBoot01Application.class, args);
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    【启动,运行路径:http://localhost:8080/xxx/providerInfoLis拿到数据库的数据】

    在这里插入图片描述

    七、关于application.properties文件


    application.properties格式文件

    #配置相关配置,格式如下
    #项目名
    spring.application.name: springBoot01
    #端口号
    service.port: 8080
    
    • 1
    • 2
    • 3
    • 4
    • 5

    application.properties可以将后缀名改为.yml文件,application.yml格式如下(冒号后面空格一下;项目用此格式):

    #数据库连接(导jar包)
    spring:
      datasource:
        url: jdbc:mysql://localhost:3306/数据库名称?useUnicode=true&characterEncoding=utf8&useSSL=false
        driver-class-name: com.mysql.jdbc.Driver
        username: xxxx
        password: xxxx
    
    # 端口号
    server:
      port: 8080
    
    namevo: 朱尔斯
    
    # mybatis相关配置
    mybatis:
      mapper-locations: classpath:mapper/*.xml  #扫描mapper(dao层)
      type-aliases-package: com.jules.springboot01.pojo    #别名
      configuration:
        log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #SQL控制台打印
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    【有关静态资源配置:】
    在这里插入图片描述
    不配置静态资源,直接访问index.html,报错:
    在这里插入图片描述
    配置静态资源就可以正常进入index.html;也可以本地磁盘

    spring: 
    	resources: 
    		static-locations: classpath:/templates,classpath:/static/,file:D://
    
    
    • 1
    • 2
    • 3
    • 4

    八、注解


    @Configuration

    标注一个类为配置类:可以自己创建配置文件类,加上@Configuration则表示是配置文件,项目启动会先加载此类。

    @Bean

    用@Bean标注方法等价于XML中配置的bean

    @ConfigurationProperties + @Value

    读取properties或yml文件+读取里面的值

    示例:

    @Configuration //容器启动时加载
    //@ConfigurationProperties("application.yml")
    public class AppConfig {
    	@Value("${namevo}")
    	private String namevo;
    
    	//创建bean实例 别名为stu
    	@Bean(name = "stu")
    	public Student getStudent(){
    		Student stu = new Student();
    		stu.setStudentName("Jules");
    		return stu;
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    @ComponentScan
    • 此注解已经存在@SpringBootApplication中,自动扫描当前包以及子包service,controller层
    • 如果扫描非当前包,则需要在添加@ComponentScan()去扫描@ComponentScan("com.jules.springBoot")多包逗号隔开
      在这里插入图片描述
    • 或者使用@SpringBootApplication注解的scanBasePackages属性进行配置@SpringBootApplication(scanBasePackages ={"com.jules.service","com.jules.controller"})多包使用数组形式
    @EnableTransactionManagement
    • 开启事务注解:在总局上开启则在启动类上使用@EnableTransactionManagement
    • 具体使用事务:用@Transactional注解,例如service层,谁用则在方法上@Transactional

    九、配置外部容器:


    1.去掉pom.xml中默认加载的tomcat,并添加servlet-api
    <dependency>
    	<groupId>org.springframework.bootgroupId>
    	<artifactId>spring-boot-starter-webartifactId>
    	
    	<exclusions>
    		<exclusion>
    		<groupId>org.springframework.bootgroupId>
    		<artifactId>spring-boot-starter-tomcatartifactId>
    		exclusion>
    	exclusions>
    dependency>
    
    <dependency>
    	<groupId>javax.servletgroupId>
    	<artifactId>javax.servlet-apiartifactId>
    	<version>4.0.1version>
    	<scope>providedscope>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    2.覆盖启动类
    //使启动类继承 SpringBootServletInitializer 类,并覆盖 configure 方法
    @SpringBootApplication
    public class SpringbootCSApplication extends SpringBootServletInitializer {
    
    	//覆盖configure方法
    	protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
    		return builder.sources(SpringbootCS.class);
    	}
    	
    	public static void main(String[] args) {
    		SpringApplication.run(SpringbootCS.class, args);
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    3.加入自己的服务器

    跟以前的加入与启动服务器是一样的
    在这里插入图片描述

    十、SpringBoot中application.xxx配置文件的加载顺序


    问:在正常项目下有一个application.yml文件和application.properties文件,先加载哪个文件?

    答:先加载后缀为.properties的,如果.yml中的有相同的配置,则不会在加载.yml配置。按优先级排序,位置高的将覆盖位置低的(properties位置高)。

    比如:

    # application.properties文件
    namevo: 朱尔斯
    
    • 1
    • 2
    # application.yml文件
    namevo: Jules
    
    • 1
    • 2

    执行输出的会是:“朱尔斯”


    在这里插入图片描述

    如果在不同的目录中存在多个配置文件,它的读取顺序是:

    • 1、项目根目录下的config文件中的:
      • config/application.properties
      • config/application.yml
    • 2、项目根目录下的:
      • application.properties
      • application.yml
    • 3、项目resources目录下config目录中的:
      • resources/config/application.properties
      • resources/config/application.yml
    • 4、项目的resources目录下(项目创建自动生成的):
      • resources/application.properties(项目的resources目录下)
      • resources/application.ym
  • 相关阅读:
    【Proteus仿真】【51单片机】防火防盗GSM智能家居设计
    毕业设计 stm32单片机智能车辆仪表盘系统 - 物联网
    一名普通学生的大一总结【不知我等是愚是狂,唯知一路向前奔驰】
    DolphinScheduler3.0.0 集群部署过程
    (附源码)php积极心理学交流学习网站 毕业设计 100623
    MySQL - MySQL 三范式理解
    kafka第三课-可视化工具、生产环境问题总结以及性能优化
    极限多标签学习之-PLT
    Vue2.7 + Vite3.2 + Rollup 组件库开发指南
    人工智能 | ShowMeAI资讯日报 #2022.06.24
  • 原文地址:https://blog.csdn.net/m0_70083523/article/details/127887766