第一个SpringBoot程序、自定义banner、SpringBoot中pom.xml分析、SpringBoot集成MyBatis、前端页面传值

SpringBoot

1、简介

Servlet+jsp:原生开发,十分的麻烦,在web.xml和代码中有很多的重复代码

Spring:从2003年Spring出现到现在,Spring已经变得不是那么简单了,里面配置文件过于繁琐。再加上集成很多的框架,会导致程序变得很臃肿

SpringBoot:简化配置文件,可以简单的理解为Spring的升级版,原来Spring中的很多配置文件要手动配置,而SpringBoot可以自动配置,简化开发,将注意力放在具体的代码上,而不是配置文件

在SpringBoot中自动配置web.xml、Tomcat服务器、Maven依赖等,写一个Web项目就好比写一个Java的Hello World程序一样简单

2、第一个SpringBoot程序

1、打开IEDA,构建一个SpringBoot程序

在这里插入图片描述

2、填写项目基本信息

在这里插入图片描述

3、勾选启动器(Spring web),相当于帮你配置好了Spring和SpringMVC、Tomcat等

在这里插入图片描述

4、选择文件位置,等待下载所有的Maven依赖,第一次下载会比较慢,耐心等待

在这里插入图片描述

5、新建Controller包,创建HelloController类

要在主启动类的同级或子级目录下新建包,否则项目识别不了

package org.westos.springbootdemo.controller;

@Controller
public class HelloController {

    @RequestMapping("/hello")
    //只返回json字符串,而不是页面
    @ResponseBody
    public String hello() {
        return "Hello,springBoot!";
    }
}

6、启动主启动类,访问测试

发现Controller返回的Hello,springBoot! 过来了

在这里插入图片描述

3、自定义项目启动Log

实现自定义的SpringBoot启动logo

在线banner生成网站:https://www.bootschool.net/ascii

在这里插入图片描述

在SpringBoot项目的resource目录下新建banner.txt,将生成的banner粘贴进去就OK了

4、pom.xml讲解

1、怎么启动的

我们创建的SpringBoot程序中会默认配置一个项目名Application类,这个类就是当前项目的主启动类,用来开启服务,下来我们看这个类的代码

//只要标注了这个注解,就代表是一个SpringBoot应用
@SpringBootApplication
public class SpringbootdemoApplication {

    public static void main(String[] args) {
        //启动方法,调用SpringApplication类的run方法
        //参数为当前类的class对象,main方法的args参数
        SpringApplication.run(SpringbootdemoApplication.class, args);
    }
}

下来我们删掉项目原来的主启动类,自己创建一个

//1、添加SpringBootApplication注解
@SpringBootApplication
public class MyApplication {

    public static void main(String[] args) {
        //2、调用SpringApplication类的run方法
        SpringApplication.run(MyApplication.class, args);
    }
}

启动项目,发现项目依然可以启动起来,没有问题。

那么,SpringApplication类的run方法究竟是怎么执行起来的呢?

我们点进源码看一下,发现真正调用的这个run方法

在这里插入图片描述

2、依赖怎么配置的

我们并没有像spring中那样配置Tomcat、servlet、spring、Maven依赖等,这些都是怎么生效的呢

pom.xml研究

  1. 父依赖
<!--pom.xml中父依赖
spring-boot-starter就是一个启动类
1、里面有常用的绝大部分依赖,如果在里面有,就不用在pom.xml文件中单独进行配置了,没有再进行配置
2、进行插件和资源过滤等管理
-->
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.2.5.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

<!--我们点进org.springframework.boot
发现在spring-boot-dependencies中进行了绝大部分依赖的导入
所以在pom.xml就不用再单独进行配置了
-->
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-dependencies</artifactId>
    <version>2.2.5.RELEASE</version>
    <relativePath>../../spring-boot-dependencies</relativePath>
</parent>

......

<resources>
    <!--资源过滤-->
</resources>

......

<pluginManagement>
    <!--插件管理-->
</pluginManagement>
......
  1. 启动器

官网链接:https://docs.spring.io/spring-boot/docs/2.2.5.RELEASE/reference/html/using-spring-boot.html#using-boot,在里面有所有的场景启动器

<dependencies>

    <!--spring-boot-starter
    场景启动器,会自动导入对应场景的依赖
    -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
        <exclusions>
            <exclusion>
                <groupId>org.junit.vintage</groupId>
                <artifactId>junit-vintage-engine</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
</dependencies>

5、三种配置文件

SpringBoot中配置文件的类型:yml、yaml、properties,现在官方推荐使用yml,但是仍然是properties配置文件使用的较多

1、application.properties

在application.properties配置文件中可以编写一些SpringBoot的配置

  1. 配置Tomcat服务器端口

    server.port=9090

    这时候我们输入localhost:8080/就访问不到,而输入localhost:9090/就可以

在这里插入图片描述

  1. 还可以进行mybatis、spring等的配置,所有的配置都可以在里面进行

2、yaml配置

我们在pom.xml中点进

在这里插入图片描述

发现里面的配置文件过滤有好几种格式

在这里插入图片描述

yaml语法:

空格严格要求,缩进严格要求(一个缩进是两个空格)

行首一般是两个空格,代表从属关系,键与值之间一般是一个空格隔开

#普通键值对
key: value

name: zhangsan

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

person:
  name: zhangsan
  age: 23

#list/数组
key:
  - v1
  - v2

pets:
  - dog
  - cat

#还可以向json一样,有行内写法,比如写person对象
person: {name: zhangsan,age: 23}
#写数组
pets: [dog,cat]

5、SpringBoo集成MyBatis

mybatis所有的包都要手动导入maven依赖

1、导入依赖

<!--导入mybatis和mysql依赖-->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.1.1</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>

2、配置mysql连接

  • 使用application.properties
#配置mysql数据库
# mysql 5 和 mysql 8 的区别
# mysql 5 :driver-class-name=com.mysql.jdbc.Driver
# mysql 8 :driver-class-name=com.mysql.cj.jdbc.Driver,在URL中要编写时区配置

spring.datasource.username=root
spring.datasource.password=123
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&useUnicode=true&characterEncoding-utf-8
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
  • 使用application.yml
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: 123
    url: jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&useUnicode=true&characterEncoding-utf-8

3、测试数据源

package org.westos.springbootdemo;

@SpringBootTest
class SpringbootdemoApplicationTests {

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

    @Test
    void contextLoads() throws SQLException {
        //查看默认的数据源
        System.out.println(dataSource.getClass());
        //查看连接信息
        Connection connection = dataSource.getConnection();
        System.out.println(connection);
        //关闭连接
        connection.close();
    }
}

默认的是Hikari数据源

4、创建pojo包,创建User实体类

导入lombok依赖

<!-- lombok依赖 -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.12</version>
</dependency>
package org.westos.springbootdemo.pojo;

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

5、创建Mapper接口及mapper.xml

UserMapper接口

package org.westos.springbootdemo.mapper;

@Repository//代表持久层的
@Mapper
public interface UserMapper {

    //获得所有的用户信息
    List<User> getUserList();
}

UserMapepr.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="org.westos.springbootdemo.mapper.UserMapper">

    <select id="getUserList" resultType="User">
        select * from `user`;
    </select>
</mapper>

6、配置别名及xml扫面包

mybatis:
  type-aliases-package: org.westos.springbootdemo.pojo
  mapper-locations: classpath:org/westos/springbootdemo/mapper/*.xml

7、创建UserController类

package org.westos.springbootdemo.controller;

@RestController
public class MyBatisController {

    @Autowired
    private UserMapper mapper;

    @RequestMapping("/mybatis")
    public String getUserList() {
        List<User> list = mapper.getUserList();
        return list.toString();
    }
}

8、测试运行

发现有报错,说getUserList方法找不到,所以我们检查UserMapper.xml文件和在application.yml中的配置,没发现什么问题

在这里插入图片描述

这个时候,我们打开target目录,发现UserMapper.xml文件根本就没有编译进来

在这里插入图片描述

原来是pom.xml文档中的过滤出了问题,点进parent标签里的artifactId值,发现过滤器中没有设置过滤xml文件,所以在target目录中才没有输出UserMapper.xml

在这里插入图片描述

那么找到了问题,只需要在pom.xml中添加xml过滤就好了

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
    <!--添加xml的过滤-->
    <resources>
        <resource>
            <filtering>true</filtering>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.xml</include>
            </includes>
        </resource>
    </resources>
</build>

然后运行程序,数据库中的信息就显示出来了

在这里插入图片描述

6、SpringBoot页面传值

当我们启动SpringBoot时,输入http://localhost:8080/发现显示的是页面不存在,没有默认的index首页,那么我们怎么定制首页呢?

1、首页存放的位置

首先我们先看首页能存放的位置,在ResourceProperties类下存放着我们的一些资源路径,可以输入类名,点进去看一下

public class ResourceProperties {
    //我们可以看到,在CLASSPATH_RESOURCE_LOCATIONS变量中定义了我们资源的存放路径
    //除了创建项目开始resources目录下就有的static、templates包之外,还能扫描public、resources目录
    private static final String[] CLASSPATH_RESOURCE_LOCATIONS = new String[]{"classpath:/META-INF/resources/", "classpath:/resources/", "classpath:/static/", "classpath:/public/"};
    private String[] staticLocations;
    private boolean addMappings;
    private final ResourceProperties.Chain chain;
    private final ResourceProperties.Cache cache;

所以resources目录下除了已有的static、templates包之外,还能创建public、resources目录

2、测试resources目录下文件夹

在resources目录下创建public、resources目录

在templates目录下创建index.html文件

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

<h1>Hello,这是我的首页!</h1>

</body>
</html>

启动项目,输入localhost:8080/index.html,发现404,页面找不到

在这里插入图片描述

这是因为templates目录下的资源只能通过Controller跳转访问,不能直接访问资源,类似于web项目中的WEB-INF目录

将index.html文件挪到public目录下,重新运行项目

在这里插入图片描述

发现可以直接访问首页,再将index.html文件分别挪到static和resources目录下,发现同样可以访问到。

templates目录下的文件只能由Controller跳转访问,public、static、resources目录下文件可以直接访问

3、跳转到templates目录下文件

将index.html文件再次挪到templates目录下,创建IndexController类

package org.westos.springbootdemo.controller;

@Controller
public class IndexController {

    //只要访问localhost:8080/,就跳转到index.html页面
    @RequestMapping("/")
    public String index() {
        System.out.println("请求进来了");
        //跳转到首页
        return "index";
    }
}

启动项目,访问localhost:8080/,发现页面404

在这里插入图片描述

原来这是因为SpringBoot在解析页面的时候默认使用的是thymeleaf,所以要导入thymeleaf的依赖,只要在SpringBoot中编写页面跳转,就要导入这个依赖

<!--导入thymeleaf依赖,如果要编写页面,就要使用这个依赖-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

再次启动项目,发现跳转到templates目录下的首页了

在这里插入图片描述

4、页面传值

在后端Controller中使用Model对象传值

在前端使用thymeleaf表达式,th:xxx接收后端的值

编写IndexController类

package org.westos.springbootdemo.controller;

@Controller
public class IndexController {

    //只要访问localhost:8080/,就跳转到index.html页面
    @RequestMapping("/")
    public String index(Model model) {
        //使用Model对象进行传值
        //传字段
        model.addAttribute("msg","Hello!");
        //传对象
        model.addAttribute("user",new User(8,"李四","123"));
        //传集合
        model.addAttribute("lists", Arrays.asList("语文","数学","英语"));
        //跳转到首页
        return "index";
    }
}

编写index.html页面

  1. 导入命名空间:xmlns:th="http://www.thymeleaf.or"
  2. 使用th:xxx取值
<!DOCTYPE html>
<html lang="en"  xmlns:th="http://www.thymeleaf.or">
<head>
    <meta charset="UTF-8">
    <title>首页</title>
</head>
<body>

<!--取普通字段-->
<h1 th:text="${msg}"></h1>

<!--取对象属性-->
<h3 th:text="${user.name}"></h3>

<!--取集合遍历-->
<a th:each="list:${lists}" th:text="${list}"></a>
<br>
<!--行内写法,和上面的写法效果一样-->
<a th:each="list:${lists}">[[${list}]]</a>

</body>
</html>

基本thymeleaf表达式语法

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值