SpringBootHelloWorld1.创建Meven工程2.引入依赖

pom.xml

    org.springframework.boot    spring-boot-starter-parent    2.3.4.RELEASE            org.springframework.boot        spring-boot-starter-web    

3 .创建主程序

/** * 主程序类 * @SpringBootApplication:一个springboot应用 */@SpringBootApplicationpublic class MainApplication {    public static void main(String[] args) {        SpringApplication.run(MainApplication.class,args);    }}

4.写业务

@RestControllerpublic class HelloController {    @RequestMapping("/hello")    public String handle01(){        return "Hello SpringBoot2!";    }}

5.运行main,浏览器打开localhost:8080/hello6.简化配置

application.properties

server.port=8888

7.简化部署

打包方式jar

把项目打成jar包,直接在目标服务器执行即可

                        org.springframework.boot            spring-boot-maven-plugin            

自动配置原理1.依赖管理

  • 父项目做依赖管理
依赖管理    org.springframework.boot    spring-boot-starter-parent    2.3.4.RELEASE他的父项目    org.springframework.boot    spring-boot-dependencies    2.3.4.RELEASE
  • 开发导入starter场景启动器
1、见到很多 spring-boot-starter-* : *就某种场景2、只要引入starter,这个场景的所有常规需要的依赖我们都自动引入3、SpringBoot所有支持的场景https://docs.spring.io/spring-boot/docs/current/reference/html/using-spring-boot.html#using-boot-starter4、见到的  *-spring-boot-starter: 第三方为我们提供的简化开发的场景启动器。5、所有场景启动器最底层的依赖    org.springframework.boot    spring-boot-starter    2.3.4.RELEASE    compile
  • 无需关注版本号,自动版本仲裁
1、引入依赖默认都可以不写版本2、引入非版本仲裁的jar,要写版本号。
  • 可以修改版本号
1、查看spring-boot-dependencies里面规定当前依赖的版本用的key。2、在当前项目里面重写配置    5.1.43

2.自动配置

  • 自动配好Tomcat
    • 引入Tomcat依赖
    • 配置Tomcat
  • 自动配好SpringMVC
    • 引入SpringMVC全套组件
    • 自动配好SpringMVC常用组件(功能)
  • 自动配好Web常见功能,如字符编码问题
    • SpringBoot帮我们配置好了web开发常见场景
  • 默认的包结构
    • 主程序所在包及其子包中的组件默认会被扫描
    • 无需配置包扫描
    • 改变扫描路径@SpringBootApplication(scanBasePackages=”com.xust”)或@ComponentScan 指定扫描路径
  • 各种配置拥有默认值
    • 默认配置最终都是映射到某个类上,如:MultipartProperties
    • 配置文件的值最终会绑定每个类上,这个类会在容器中创建对象
  • 按需加载所有默认配置项

配置文件1.文件类型yaml

适合做以数据为中心的配置文件

基本语法

  • key: value,value前有空格
  • 大小写敏感
  • 使用缩进表示层级关系
  • 缩进不允许用tab,只能用空格
  • 缩进的空格数不重要,只要同层级元素左对齐就行
  • 表示注释
  • 字符串不需要加引号,‘ ’和“ ”表示转义/不转义,’\n’不换行,”\n”换行

数据类型

  • 字面量:单个的、不可再分的值。date、boolean、string、number、null
k: v
  • 对象:键值对的集合。map、hash、set、object
行内写法:k: {k1:v1,k2:v2,k3:v3}#或k: k1: v1k2: v2k3: v3
  • 数组:一组按次序排列的值。array、list、queue
行内写法:  k: [v1,v2,v3]#或者k: - v1 - v2 - v3

举例

@ConfigurationProperties(prefix = "person")@Component@ToString@Datapublic class Person {    private String userName;    private Boolean boss;    private Date birth;    private Integer age;    private Pet pet;    private String[] interests;    private List animal;    private Map score;    private Set salarys;    private Map<String, List> allPets;    public Person() {    }}@Data@ToStringpublic class Pet {    private String name;    private Double weight;}

application.yaml

person:  userName: zhangsan  boss: false  birth: 2019/12/12 20:12:33  age: 18  pet:    name: tomcat    weight: 23.4  interests: [篮球,游泳]  animal:    - jerry    - mario  score:    english:      first: 30      second: 40      third: 50    math: [131,140,148]    chinese: {first: 128,second: 136}  salarys: [3999,4999.98,5999.99]  allPets:    sick:      - {name: tom}      - {name: jerry,weight: 47}    health: [{name: mario,weight: 47}]

2.自定义绑定的配置提示

    org.springframework.boot    spring-boot-configuration-processor    true                        org.springframework.boot            spring-boot-maven-plugin                                                                        org.springframework.boot                        spring-boot-configuration-processor                                                            

Web开发简单功能分析静态资源(1)静态资源目录

将静态资源放在/static,/public,/resources,/META-INF/resources

访问:当前项目根路径/+静态资源名

优先级:resources>static>public

原理:静态映射/**

请求进来,先去找Controller看能不能处理。不能处理的所有请求又去交给静态资源处理器。如果静态资源也找不到则响应404页面

(2)静态资源访问前缀

默认无前缀

application.yaml中配置访问前缀为res,改变默认静态资源路径

spring:  mvc:    static-path-pattern: /res/**  web:    resources:      static-locations: [classpath:/hehe/]

欢迎页支持

  • 静态资源路径下index.html
    • 可以修改静态资源默认访问路径,但是不能配置访问前缀,否则会导致index.html文件不能被默认访问
  • controller处理index.html

favicon图标

将图标图片名称改为favicon.ico置于静态资源目录下即可

配置访问前缀会使该功能失效

模板引擎

SpringBoot不支持jsp,需要引入第三方模板引擎进行页面渲染

模板引擎-ThymeleafThymeleaf的使用1.引入starter

    org.springframework.boot    spring-boot-starter-thymeleaf

2.自动配置好了Thymeleaf

默认前后缀

将html页面置于resources/templates目录下即可自动渲染

public static final String DEFAULT_PREFIX = "classpath:/templates/";public static final String DEFAULT_SUFFIX = ".html";  //xxx.html

3.页面开发

引入名称空间xmlns:th=”http://www.thymeleaf.org”

        Title

哈哈

去百度1
去百度2

@Controllerpublic class ViewTestController {    @GetMapping("/xust")    public String xust(Model model){        //model中的数据会被放在请求域中,相当于request.setAttribute("a",aa)        model.addAttribute("msg","你好,xust");        model.addAttribute("link","http://www.baidu.com");        return "success.html";    }}

构建后台管理系统拦截器文件上传数据访问数据源的自动配置-HikariDataSource导入jdbc场景

    org.springframework.boot    spring-boot-starter-data-jdbc

数据库驱动(默认8.0.22)

    mysql    mysql-connector-java

修改配置项

application.yaml

spring:  datasource:    url: jdbc:mysql://localhost:3306/db_account    username: root    password: xpx24167830    driver-class-name: com.mysql.cj.jdbc.Driver

Test

@Slf4j@SpringBootTestclass Boot03WebAdminApplicationTests {    @Autowired    JdbcTemplate jdbcTemplate;    @Test    void contextLoads() {        Long aLong = jdbcTemplate.queryForObject("select count(*) from t_emp", Long.class);        log.info("记录总数:{}",aLong);    }}

Druid数据源自定义方式依赖

    com.alibaba    druid    1.1.17

整合MyBatis

pom.xml

    org.mybatis.spring.boot    mybatis-spring-boot-starter    2.2.2

application.yaml

server:  port: 8888spring:  datasource:    username: root    password: xpx24167830    #?serverTimezone=UTC解决时区的报错    url: jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8    driver-class-name: com.mysql.cj.jdbc.Drivermybatis:  type-aliases-package: com.xust.pojo  mapper-locations: classpath:mybatis/mapper/*.xml

UserMapper.java

@Mapper@Repositorypublic interface UserMapper {    List queryUserList();}

UserMapper.xml

            select * from t_emp    

UserController.java

@RestControllerpublic class UserController {    @Autowired    private UserMapper userMapper;    @GetMapping("/queryUserList")    private List queryUserList(){        List userList = userMapper.queryUserList();        for (User user:userList){            System.out.println(user);        }        return userList;    }}