SpringBoot

SpringBoot

1、回顾Spring

  • spring是为了解决企业级应用开发的复杂性创建的,简化开发

  • 基于POJO轻量级

  • 通过IOC,依赖注入(DI),面向接口

  • 基于AOP(切面)和惯例进行声明式编程

2、什么是SpringBoot

  • 一个javaweb开发框架,和springMVC类似

  • 约定大于配置

  • javaEE---》j2EE---》spring---》springBoot

  • 集成第三方库配置

微服务架构:业务service---》模块

3、第一个springboot程序

  • jdk 21

  • mysql 5.7.19

  • maven 3.9.9

  • springboot 3.4.4

  • IDEA

    官方:提供了一个快速生成网站。

  • 可以官网直接下载,导入

  • 可以直接使用IDEA创建一个springboot项目(一般,开发直接IDEA创建)

  1. Idea创建springboot项目,勾选springweb,创建项目后删掉多余的文件

  2. 在yang下新建controller层,新建HelloController类

@RestController
@RequestMapping("/Hello")
public class HelloController {
    @RequestMapping("/hello")
    public String hello(){
        return "hello!";
    }
}
  1. 更改项目端口号,在application.properties文件添加
#更改项目端口号
server.port=8082

访问网址:http://localhost:8082/Hello/hello

  1. 修改banner.txt(玩一玩),网址:关于人物的ascii艺术字,自定义Spring Boot 人物 banner下载,各种有意思的banner、ascii图案,还有中文文字banner,作为Spring Boot和终端命令行banner会让项目更有意思。-bootschool.net

4、springboot自动装配原理

pom.xml:

  • spring-boot-dependencies:核心依赖在父工程中

  • 我们写或者引入springboot依赖的时候,不需要指定版本,有版本仓库

启动器:

  • <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter</artifactId>
            </dependency>
    
  • 启动器是springboot的启动场景

  • 比如:spring-boot-starter-web ,会帮我们自动导入web环境的所有依赖!

  • springboot会将所有功能场景,变成一个个启动器

  • 我们要使用什么功能,只要找到对应启动器就欧克了start

主程序:

@SpringBootApplication//标注这个类是springboot应用
public class Springboot01DemoApplication {

    public static void main(String[] args) {
        //将springboot应用启动
        SpringApplication.run(Springboot01DemoApplication.class, args);
    }

}

注解:

总结:

5、yaml 以及springboot配置

5.1、yaml基本语法

  • application.yaml 语法结构:key:空格value

  • 作用:修改springboot自动配置默认值

  • 对空格要求十分高!!!!!

#普通的key-value
name: yangshi
#对象
student:
  name: yangshi
  id: 12

student1: {name: yangshi,id: 3}

#数组
pets:
  - cat
  - dog
  - pig
pets1: [cat,dog,pig]

5.2、给属性赋值几种方式

  1. 原生的
@Value("maomao")
private String name;
@Value("2")
private Integer age;
  1. yaml可以给实体类赋值
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
    private String name;
    private Integer age;
    private Boolean happy;
    private Date birth;
    private Map<String,Object> maps;
    private List<Object> lists;
    private Dog dog;

    //Person{name='yangshi',
    // age=12, 
    // happy=true, 
    // birth=Fri Dec 12 00:00:00 CST 2025,
    // maps={k1=v1, k2=v2}, 
    // lists=[code, music, girl], 
    // dog=Dog{name='maomao', age=2}}
person:
  name: yangshi
  age: 12
  happy: true
  birth: 2025/12/12
  maps: {k1: v1,k2: v2}
  lists: [code,music,girl]
  dog:
    name: maomao
    age: 2

@ConfigurationProperties(prefix = "person"):

将springboot的Person类所有属性和配置文件中person下属性一一对应!!

  1. properties文件赋值

yaml 代码步骤:

  1. 导入处理器

  2. 编写配置文件

  3. 绑定

  4. 测试

松散绑定:

yaml里面写last_name,和类里面写lastName效果一致,可以绑定!!!

总结:

  • 只需要某一个值,可以用@value

  • 专门编写一个javaBean和配置文件映射,直接使用@ConfigurationProperties!!!!

JSR303校验:

可看源码,可看百度,还可以自定义数据校验规则

配置文件位置:

有四个位置:优先级为项目目录下的config目录下 > 项目目录下 > resources目录下config目录下 > resources目录下

多环境下切换:

  • properties文件

  • yaml文件

    # application.yaml(默认配置)
    server:
      port: 8080
    spring:
      config:
        activate:
          on-profile: dev
    
    ---
    # dev 环境配置
    spring:
      config:
        activate:
          on-profile: dev
    server:
      port: 8081
    
    ---
    # prod 环境配置
    spring:
      config:
        activate:
          on-profile: prod
    server:
      port: 8082
    

自动配置原理再理解:

6、springboot web开发

springboot帮我们配置了什么?能不能修改?能修改什么?能不能扩展?

  • xxxxxAutoConfiguration...向容器自动配置组件

  • xxxxxxProperties:自动装配类,装配配置文件中自定义内容

要解决问题:

  • 导入静态资源

  • 首页

  • jsp,模板引擎Thymeleaf

  • 装配扩展SpringMvc

  • 增删查改

  • 拦截器

  • 国际化

开发:

  1. 创建springboot项目,勾选web,删除多余文件

  2. 创建controller层,编写HelloController类测试一下环境能不能跑起来,然后再继续编写代码

@RestController
public class HelloController {
    @RequestMapping("/hello")
    public String hello(){
        return "hello!";
    }
}

6.1、处理静态资源方式

看源码,理解源码

  1. webjars

官网:WebJars - Web Libraries in Jars

导入maven依赖;根据源码输入网址;

  1. resources目录下创建public目录,resources目录,static目录;

优先级:resources > static(默认) >public

映射地址:localhost:xxxx/

直接访问 http://localhost:8082/1.js 可以读取文件资源

6.2、首页和图标定制

index.html (首页),favicon.ico(图标即图片)可以放在resources目录下的public目录,resources目录,static目录,templates目录下;

6.3、模板引擎

thymeleaf:

  1. 导入依赖 thymeleaf
  • 官网:

  • github:

  • spring官方文档:

导依赖失败,注意创建项目的时候一定要看项目settings,选择自定义本地仓库了没有

导依赖:

        <!--Tymeleaf 我们都是基于3.x开发的-->
        <dependency>
            <groupId>org.thymeleaf</groupId>
            <artifactId>thymeleaf-spring6</artifactId>
        </dependency>
        <dependency>
            <groupId>org.thymeleaf.extras</groupId>
            <artifactId>thymeleaf-extras-java8time</artifactId>
            <version>3.0.4.RELEASE</version>
        </dependency>

thymeleaf-extras-java8time 不是 Spring Boot 官方管理的依赖,因此父 POM 不会自动提供它的版本号,需要指定版本的依赖

导入模板引擎之后:

html可以放在templates目录下,接着controller层调用即可。

thymeleaf 语法:看官方文档学习

  • th:元素名

  • 和Java代码很类似

test.html

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<!--所有html元素都可以被thymeleaf替换接管  th:元素名-->
<!--1.IntelliJ IDEA等IDE无法动态识别Thymeleaf模板中由控制器(@Controller)在运行时注入的变量,因此会显示"无法解析"的警告
    2.Spring Boot在运行时才会将Model中的属性(如msg、users)注入模板,所以网页能正常显示。
    3.只要在创建项目的时候勾选Thymeleaf插件就不会爆红了-->
<div th:text="${msg}"></div>
<div th:utext="${msg}"></div>
<div th:each="user:${users}" th:text="${user}"></div>
</body>
</html>

HelloController

@Controller
public class HelloController {
    @RequestMapping("/test")
    public String test(Model model){
        model.addAttribute("msg","<h1>Hello,Springboot!!!<h1>");
        model.addAttribute("users", Arrays.asList("yangshi","qingqing"));
        return "test";
    }

}

6.4、装配扩展SpringMvc

多读源码!!!!!

  • 实现 WebMvcConfigurer 并重写相关方法来自定义配置(推荐)

    //如果想要diy功能,写这个组件,将他交给springboot,springboot帮我们自动装配
    
    @Configuration
    public class MymvcConfig implements WebMvcConfigurer{
    
        //视图跳转
        public void addViewController(ViewControllerRegistry registry){
            registry.addViewController("/test1").setViewName("test");
            return;
        }
    }
    
  • 使用 @EnableWebMvc + WebMvcConfigurer(完全控制 MVC 配置 ,即springboot原本默认的自动装配会失效)

在springboot中,有非常多的xxxxConfiguration 帮助我们进行扩展配置,注意注意!!!!!

7、员工管理系统

7.1、准备工作

模拟数据库

7.2、首页

注意点:

  • 所有页面静态资源都需要使用thymeleaf接管:@{}

  • 关闭模板引擎缓存:spring.thymeleaf.cache=false

  • 推荐首页网址:server.servlet.context-path=/xxx (例如:/yang)

7.3、国际化(中英文切换)

7.4、登录功能

首页的登录组件 action由thymeleaf接管,传地址,同时写一个登录控制类且给他相同地址;登陆控制类执行方法跳转页面;

  • 登录成功,重定向跳转成功登录之后的页面

  • 登录失败返回首页,原本填写的内容显现,并出现用户或密码错误字条

7.5、登录拦截器

在config包写一个类实现HandlerInterceptor接口;在MyMvcConfig类添加拦截器的方法

7.6、增删查改

8、如何写一个网站

bootstrap 后端

前端:

  • 百度 bootstrap 模板,拿别人的来改动

  • 框架:组件(自己手动组合拼接) Bootstrap,Layui,semantic-ui

    • 栅格系统

    • 导航栏

    • 侧边栏

    • 表单

  1. 搞定前端,页面长什么样子,数据

  2. 设计数据库(数据库设计难点!!)

  3. 前端让他能够自动运行,独立化工程

  4. 数据接口如何对接:json,对象

  5. 前后端联调测试

有一套自己熟悉的后台模板!!!以后工作

Layui的 x-admin

前端界面:至少自己能通过前端框架组合出来一个网站页面 index,about,blog,post,user

让网站独立运行!

计划下面学习:

  • JDBC重点

  • Mybatis重点

  • Druid重点

  • Shiro重点

  • Spring Security(安全)

  • 异步任务,邮件发送,定时任务

  • Swagger

  • Dubbo+Zookeeper

9、整合JDBC

创建项目勾选web,jdbc,Mysql驱动

application.yaml填写连接数据库信息

注意:版本新的要配置时区

10、整合Druid数据源

  • maven 仓库里面复制maven依赖;

  • yaml文件填写连接数据库信息时添加一个type

  • yaml文件配置一些其他属性信息(记得导入log4j的依赖)

  • 还可以自定义配置:

    • config包下创建类并加注解(相当于一个一个bean)

    • 写方法和yaml属性绑定

    • 强大方法---后台监控,filter

11、整合mybatis

  • maven 仓库 里面复制maven依赖;

  • mapper包下建Usermapper接口,在resources目录下新建mybatis/mapper目录,并在其下建UserMapper.xml文件

  • 去application配置文件,扫描主体类包,以及.xml文件(注意:classpath指的是resources目录)

MVC:

M:数据业务

V:视图

C:交接

posted @ 2025-04-26 13:26  蟹堡博  阅读(29)  评论(0)    收藏  举报