SpringBoot介绍和入门案例和延伸

本文详细介绍了SpringBoot的基础概念、创建入门项目、配置Web模块、使用SpringMVC、整合MyBatis的步骤,并展示了如何处理静态资源和读取配置文件内容。同时,解释了SpringBoot自动配置的原理,并指导如何自定义一个SpringBoot Starter。
摘要由CSDN通过智能技术生成

一.springboot

springboot是用来简化Spring应用的初始搭建以及开发过程,通过约定大于配置的原则,让开发人员以最少的配置就可以开发应用。

总结:简化基于spring的应用开发

二.入门案例

1.创建一个普通web工程SpringBootDemo

1.配置Maven

2.在pom文件中以springboot为父工程

2.1错误

 2.2点击File——Invalidate Caches——重启项目,不报红了

3.导入springboot的web模块依赖

 4.刷新Maven

 5.新建包,在包下创建启动类AppApplication

springboot中内置一个web容器,不用配置内部tomcat插件,也不用打包至外部tomcat中去运行

package com.hhh;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

//启动类
@SpringBootApplication
public class AppApplication {
    public static void main(String[] args) {
        SpringApplication.run(AppApplication.class,args);

    }
}

6.运行此类,查看效果

6.1开头:打印了springboot的图标

6.2结尾,在其他端口中运行了(可能和安装的tomcat的8080端口冲突了,这里没有在8080端口运行)

6.3修改端口

在resources目录下新建文件为application.properties(固定名)

 6.4重新启动tomcat,查看效果

 7.在包hhh下新建包controller,验证这个springmvc的使用,在这包下新建HelloController

package com.hhh.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping("/hello")
public class HelloController {

    @RequestMapping("/test1")
    @ResponseBody
    public String test1(){
        return "Controller";
    }
}

8.在浏览器中访问该路径,查看效果

 三.springboot整合MyBatis

1.导入MyBatis的starter和数据库驱动

  <!--导入MyBatis的starter-->
    <dependency>
      <groupId>org.mybatis.spring.boot</groupId>
      <artifactId>mybatis-spring-boot-starter</artifactId>
      <version>2.1.4</version>
    </dependency>
    <!--如果springboot的版本是2.1-2.4的话,MyBatis的版本要2.1.x-->

 <!--数据库驱动-->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.28</version>
    </dependency>

1.1刷新工程

 2.创建domain包,新建实体类Manager

package com.hhh.domain;

public class Manager {
    private String id;
    private String name;

    public Manager(){

    }
    public Manager(String id, String name) {
        this.id = id;
        this.name = name;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Manager{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                '}';
    }
}

3.创建dao包,新建dao层接口ManagerDao

注意:在dao层接口中的文件加上注解:@Mapper

package com.hhh.dao;

import com.hhh.domain.Manager;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

//加上注解
@Mapper
public interface ManagerDao {
    public List<Manager> findAll();
    public void insert(Manager manager);
    public void delete(String id);
}

4.在resources目录下创建com/hhh/dao包,在包下创建sql文件ManagerDao.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hhh.dao.ManagerDao">
    <select id="findAll" resultType="com.hhh.domain.Manager">
        SELECT * FROM manager1
    </select>

    <!--这里的manager1为ssmframe数据库中的其中一个表-->

</mapper>

5.在resources目录下配置文件application.properties,在里面配置数据库连接的信息

#端口设置
server.port=8081

#数据库连接设置
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/ssmframe
spring.datasource.username=root
spring.datasource.password=hyt123456


#别名设置和到sql文件扫描路径的配置
mybatis.type-aliases-package=com.hhh.domain
mybatis.mapper-locations=classpath:com/hhh/dao/*.xml

6.在HelloController类中注入dao层接口,利用注解@Autowire的注入

package com.hhh.controller;

import com.hhh.dao.ManagerDao;
import com.hhh.domain.Manager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.List;

@Controller
@RequestMapping("/hello")
public class HelloController {

    @Autowired
    private ManagerDao managerDao;
    @RequestMapping("/test1")
    @ResponseBody
    public String test1(){
        return "Controller";
    }

    @RequestMapping("/findAll")
    @ResponseBody
    public List<Manager> findAll(){
        return managerDao.findAll();
    }
}

7.启动tomcat,查看效果

8.在浏览器中访问,查看效果

 四.springboot对静态资源的处理

1.默认情况,springboot将resources/static文件夹作为静态资源的存放目录

访问路径是:项目根目录/静态资源路径

1.在resources目录下新建包为static。在包下新建index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>index</title>
</head>
<body>
<h1>首页</h1>
</body>
</html>

2.启动tomcat,在浏览器中访问,查看效果

 3.在static包下新建文件aaa,在aaa文件下新建一个test.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Test</title>
</head>
<body>
<h2>测试</h2>
</body>
</html>

4.启动tomcat,在浏览器中访问,查看效果

 2.通过配置文件来调整静态资源的存放路径和访问路径

1.在resources目录下新建文件夹为html,在该文件夹下新建test2.html

 2.在application.properties文件中配置静态资源的存放路径和访问路径


#配置静态资源的存放路径和访问路径
spring.web.resources.static-locations=classpath:/html/
spring.mvc.static-path-pattern=/**
#斜杆或者斜杆后面的路径都能访问

3.启动tomcat,在浏览器中访问test2文件,查看效果

五.springboot读取配置文件内容

1.在application.properties文件中添加内容,获取其中内容在前端输出

#自己设置的内容,想让springboot读取这内容返回至前端,添加如下设置
hhh.name=aaa
hhh.age=20

2.在一个bean中使用@Value注解来读取

2.1在HelloController文件中去读取该项内容的值,做出如下设置

package com.hhh.controller;

import com.hhh.dao.ManagerDao;
import com.hhh.domain.Manager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Controller
@RequestMapping("/hello")
public class HelloController {


   /*2.在该变量前添加注解@Value,里面填写对应键值对,对应配置文件中的项目名*/
    @Value("${hhh.name}")
    /*1.在该类下定义变量和配置文件中添加的一一对应*/
    private String name;
    @Value("${hhh.age}")
    private String age;

    @Autowired
    private ManagerDao managerDao;
    @RequestMapping("/test1")
    @ResponseBody
    public String test1(){
        return "Controller";
    }

    @RequestMapping("/findAll")
    @ResponseBody
    public List<Manager> findAll(){
        return managerDao.findAll();
    }

    /*3.创建方法读取内容*/
    @RequestMapping("/getConfig")
    @ResponseBody
    public Map<String,String> test2(){
        Map map=new HashMap();
        map.put("name",name);
        map.put("age",age);
        return map;
    }
}

2.2启动这个工程,访问这个新建的controller,查看效果

 3.使用@ConfigurationProperties注解

建立一个实体类和配置文件里的配置对应起来,加入到soring容器里头,需要用的时候直接注入

3.1正在domain包下新建一个类HConfigProperties

package com.hhh.domain;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

//用来读取自定义配置的类
@ConfigurationProperties(prefix = "hhh")
@Component
public class HConfigProperties {
    private String name;
    private String age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }
}

3.2在controller包下新建一个类ConfigController,在该文件中去读取该项内容的值

package com.hhh.controller;

import com.hhh.domain.HConfigProperties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.HashMap;
import java.util.Map;

@Controller
@RequestMapping("/config")
public class ConfigController {

    //将HConfigProperties当做一个变量使用
    @Autowired
    //通过注解自动注入,在HConfigProperties类中有加@Component注解
    private HConfigProperties hConfigProperties;

    @RequestMapping("/getConfig2")
    @ResponseBody
    public Map<String,String> test2(){
        Map map=new HashMap();
        map.put("name",hConfigProperties.getName());
        map.put("age",hConfigProperties.getAge());
        return map;
    }


}

3.3启动工程,在浏览器中访问,查看效果

 3.4该注解的优势

在其他类想使用自定义配置类时,直接使用@Autowired直接注入即可使用,底下直接调方法,不用声明变量

 六.springboot自动配置的原理

1.启动时会扫描自动类所在的包和其子包,把有@Component注解修饰的类都加入到spring容器中

Configuration注解也被@Component注解修饰了,所以所有的配置类也会被加到spring容器中,Controller注解同理

2.自动配置的原理

@SpringBootApplication——>@EnableAutoConfiguration ——>@Import——>AutoConfigurationImportSelector 这个类中有一个getCandidateConfiguration方法。此方法加载所有自动配置包下的META-INF/spring.factories文件,这个文件中会给出自动配置的入口类 org.springframework.boot.autocinfigure.EnableAutoConfiguration=xxx

2.1mybatis自动配置的原理

org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration

2.2springmvc自动配置的原理

配置前端控制器

org.springfrmaework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration

配置mvc

org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration

七.自定义一个springboot的starter

1.新建一个工程SpringBoot_Starter

1.1设置maven

 1.2导入对应功能的starter,在pom文件中以springboot为父工程

 2.springboot自动配置的关键是:META-INF/spring.factories

2.1在resources目录下新建目录为META-INF,再去新建文件为spring.factories

2.2在starter包下新建类为HService

package com.starter;

public class HService {

    //定义一个方法
    public String say(){
      return "hello springboot starter" ;
    }
}

2.3在java目录下创建包为com/starter/config,在config包下创建自动配置类HAutoConfiguration

package com.starter.config;

import com.starter.HService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration   //这是一个自动配置类
public class HAutoConfiguration {


    //把service注入到spring容器中
    @Bean
    public HService hService(){
        return new HService();
    }
}

2.4 在spring.factories文件中写配置

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
 //斜杆表示换行,值为自动配置类的全路径
com.starter.config.HAutoConfiguration

2.5这个starter需要打成一个jar包放入maven仓库里头,打jar包之前,记得将pom文件中设置的打成war包注释掉,否则打成war包而不是jar包了

3.在上一个工程SpringBootDemo中将starter引入

3.1starter坐标

  <groupId>org.example</groupId>
  <artifactId>SpringBoot_Starter</artifactId>
  <version>1.0-SNAPSHOT</version>

3.2引入starter(报错)

 3.3在controller包下新建一个类ControllerStarter用来测试

package com.hhh.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping("hello")
public class ControllerStarter {

    @Autowired
    private HSerives hSerives;
    @RequestMapping("/getStarter")
    @ResponseBody
    public String test1(){
     return hSerives.say();

    }
}

3.4启动工程,在浏览器中访问,查看效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值