SpringBoot(一)——快速入门

1. 了解SpringBoot

原生开发:Servlet + jsp ,十分麻烦,web.xml 或者代码中都会存在大量重复内容;

简化开发 :Spring 里面所有东西都是配置文件,集成很多框架或者做一些大型项目,会导致整个程序和项目十分的臃肿,通篇的配置文件;

简化配置文件 :SpringBoot 就好像Spring的升级版,原来很多东西需要手动配置,现在只需要自动配置!

梳理SSM框架中麻烦之处

  • 很多配置文件
  • web.xml、 tomcat 都要配置
  • lib依赖 也需要管理

那么在SpringBoot以上的一切,都不需要配置即可运行!

2. 第一个SpringBoot程序

1、使用IDEA构建一个SpringBoot程序
在这里插入图片描述
2、填写Maven项目基本信息
在这里插入图片描述
3、勾选启动器(Spring Web) 如果你勾选了这个,相当于帮你自动配置好了Spring和SpringMVC,包括Tomcat!
在这里插入图片描述
在这里插入图片描述
4、完成之后,等待Maven自动下载所有的依赖,再删除不需要的几个文件夹
在这里插入图片描述
最终的目录如下:
在这里插入图片描述
5、编写第一个程序

注意:一定要在 SpringBoot 主启动类的同级或者子级目录下,新建包!否则是识别不了的
在这里插入图片描述

package com.zz.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

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

6、启动主启动类,访问测试:http://localhost:8080/hello
在这里插入图片描述
拓展:我们可以自定义 banner!
自定义的启动Logo,默认是Spring,可以根据自己喜好进行修改。

(1)我们在 resource 目录下新建一个 banner.txt文件,在这里面写入自己的banner即可

(2)在线网站生成:https://www.bootschool.net/ascii
在这里插入图片描述
(3)启动测试看效果
在这里插入图片描述

3. 理解SpringBoot原理

1、怎么启动的 ?
一个注解:@SpringBootApplication
一个类:SpringApplication
在这里插入图片描述
可以将自动生成的这个主启动类删除,自己手动写一个!
(1)在类上面增加一个@SpringBootApplication注解
(2) 使用SpringApplication的run方法启动

如写一个名为 ZzApplication 的主启动类:

package com.zz;

//自己手写一个主启动类
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class ZzApplication {
    public static void main(String[] args) {
        //run方法的启动
        SpringApplication.run(ZzApplication.class,args);
    }
}

2、依赖怎么配置的

思考:我们没有配置tomcat、 没有配置servlet、没有配置spring,这个怎么生效的?
SpringBoot默认有一个 pom.xml ,里面有父依赖以及场景启动器

父依赖:
在这里插入图片描述
父依赖作用分析
(1)自动帮你管理依赖,里面包含了几乎常用的所有依赖,如果你需要的依赖在这里面有,你就不要配置了,如果没有再配置
(2)插件和资源过滤的自动管理

启动器:
spring-boot-starter-xx 导入对应场景所需要的类,会自动帮你导入封装了这个场景所需要需要的依赖
在这里插入图片描述
官网有所有的启动器:https://docs.spring.io/spring-boot/docs/2.2.5.RELEASE/reference/html/using-spring-boot.html#using-boot

4. SpringBoot 的配置

所有的配置都可以在配置文件中配置:

  • application.yml / application.yaml
  • application.properties

properties 是我们传统的配置文件 key = value

yaml 是SpringBoot 推荐的配置文件,功能更加强大

yaml 所有语法:(空格严格要求,缩进严格要求)

# 普通键值对
key: value
name: qinjiang

# map/对象
key:
  k1: v1
  k2: v3

person:
  name: qinjiang
  age: 3

# 行内写法 {}
person: {name: qinjiang,age: 3}
  
# list/数组
key:
  - v1
  - v2
  
pets:
  - dog
  - pig
  - cat

# 行内写法
pets: [dog,pig,cat]

5. SpringBoot 集成 MyBatis

注意:MyBatis 所有的包都是自己的,所以要导入自己的依赖

整个项目目录:
在这里插入图片描述

1、在pom.xml中添加驱动和依赖

        <!-- 这是自定义的包 -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.1</version>
        </dependency>
        
        <!-- mysql 驱动 在这不写版本号,默认使用mysql8的版本 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

        <!--在这里写的依赖都不需要版本号,因为在父依赖中有!-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

2、编写配置文件 application.yml

spring:
  datasource:
    username: root
    password: 123456
    url: jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
    driver-class-name: com.mysql.cj.jdbc.Driver
mybatis:
  type-aliases-package: com.kuang.pojo
  mapper-locations: classpath:com/kuang/mapper/*.xml

3、测试数据源有没有,在测试类中测试即可

package com.zz;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;

@SpringBootTest
class HelloSpringbootApplicationTests {

    // 自动导入数据源
    @Autowired
    private DataSource dataSource;

    // SpringBoot 2.X 默认集成的是 Hikari
    @Test
    void contextLoads() throws SQLException {
        // 查看默认数据源 class com.zaxxer.hikari.HikariDataSource
        System.out.println(dataSource.getClass());
        // connection
        Connection connection = dataSource.getConnection();
        System.out.println(connection);
        // 关闭连接
        connection.close();
    }
}

SpringBoot 目前默认的数据源是 class com.zaxxer.hikari.HikariDataSource

4、编写实体类 User

package com.zz.pojo;

import lombok.Data;

@Data
public class User {
    private int id;
    private String name;
    private String pwd;
}

5、编写接口 UserMapper(使用注解和 XML 都可以)

package com.zz.mapper;

import com.zz.pojo.User;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;

import java.util.List;

@Mapper // @Mapper 标注这是一个Mapper接口
@Repository // 代表持久层
public interface UserMapper {

    // @Select("select * from user") 注解方式
    List<User> getUserLists();
}

6、编写接口的配置文件 UserMapper.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.zz.mapper.UserMapper">
   <select id="getUserLists" resultType="User">
       select * from user;
   </select>
</mapper>

7、编写控制层 MyBatisController

package com.zz.controller;

import com.zz.mapper.UserMapper;
import com.zz.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
public class MyBatisController {

    @Autowired
    private UserMapper userMapper;

    @RequestMapping("/list")
    public List<User> getUserList(){
        List<User> userLists = userMapper.getUserLists();
        return userLists;
    }
}

8、配置 .xml 文件的资源过滤
由于 .xml 的配置文件没有导出,在pom.xml中配置资源过滤即可

 <resources>
        <resource>
            <filtering>true</filtering>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.xml</include>
            </includes>
        </resource>
 </resources>

9、启动主启动类,进行测试

在地址栏输入 http://localhost:8080/list ,页面就显示了数据库中user表的数据
在这里插入图片描述

6. SpringBoot 开发 Web 应用

1、资源存放目录说明

static 静态资源

templates 页面,templates只能通过 controller来访问资源文件

resources 也可以存放资源文件

public SpringBoot 源码中找到的,静态资源公共的可以放在这里

测试:
在这里插入图片描述
在这里插入图片描述
2、Thymeleaf 使用,导入静态资源模板 使用html 编写页面

Thymeleaf是一个流行的模板引擎,该模板引擎采用Java语言开发,模板引擎是一个技术名词,是跨领域跨平台的概念。

Thymeleaf的主要目标在于提供一种可被浏览器正确显示的、格式良好的模板创建方式,因此也可以用作静态建模。你可以使用它创建经过验证的XML与HTML模板。使用thymeleaf创建的html模板可以在浏览器里面直接打开(展示静态数据),这有利于前后端分离。

(1)导入对应maven依赖

<!-- thymeleaf依赖,如果要编写页面一定需要这个依赖  -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

(2)编写 html 页面放到 templates 目录下
在这里插入图片描述

(3)使用controller 进行跳转

package com.zz.controller;

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

@Controller  //可以被视图解析器解析
public class IndexController {
    //只要访问 / 就会跳转到templates目录下的index页面
    @RequestMapping("/")
    public String index(){
        return "index";
    }

    @RequestMapping("/user/index")
    public String userIndex(){
        return "user/index";
    }

    @RequestMapping("/user/list")
    public String userList(){
        return "user/list";
    }
}

(4)启动测试
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3、页面传递值
在这里插入图片描述
(1)在后端方法中使用 Model 传递值

package com.zz.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.Arrays;

@Controller  //可以被视图解析器解析
public class IndexController {

    @RequestMapping("/")
    public String index(Model model){
        model.addAttribute("msg","Hello,SpringBoot!");
        model.addAttribute("users", Arrays.asList("小猫","小狗"));
        return "index";
    }
}

(2)在前端使用 th:xxx 去接收后端传递值,注意:一定要导入头文件约束

普通取值 和 循环遍历

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<h1>首页</h1>
<!-- 普通取值 -->
<p th:text="${msg}"></p>

<!-- 循环遍历:接收后端传递的 users,遍历每个的结果就是user,可以在这个标签内使用!
th:each="item:items"
-->
<!--写法一-->
<h2 th:each="user:${users}" th:text="${user}"></h2>
<!-- 写法二:行内写法 -->
<h2 th:each="user:${users}">[[${user}]]</h2>
<!--写法三-->
<div th:each="user:${users}">
    <p th:text="${user}"></p>
</div>

</body>
</html>

启动测试:
在这里插入图片描述

发布了62 篇原创文章 · 获赞 2 · 访问量 2712

猜你喜欢

转载自blog.csdn.net/nzzynl95_/article/details/104636802
今日推荐