第一个SpringBoot程序、自定义banner、SpringBoot中pom.xml分析、SpringBoot集成MyBatis、前端页面传值
文章目录
- SpringBoot
- 1、简介
- 2、第一个SpringBoot程序
- 3、自定义项目启动Log
- 4、pom.xml讲解
- 5、三种配置文件
- 5、SpringBoo集成MyBatis
- 6、SpringBoot页面传值
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字符串,而不是页面@ResponseBodypublic String hello() {return "Hello,springBoot!";}
}
6、启动主启动类,访问测试
发现Controller返回的Hello,springBoot! 过来了
3、自定义项目启动Log
实现自定义的SpringBoot启动logo
在线banner生成网站:
在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研究
- 父依赖
<!--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>
......
- 启动器
官网链接:.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的配置
-
配置Tomcat服务器端口
server.port=9090
这时候我们输入localhost:8080/就访问不到,而输入localhost:9090/就可以
- 还可以进行mybatis、spring等的配置,所有的配置都可以在里面进行
2、yaml配置
我们在pom.xml中点进
发现里面的配置文件过滤有好几种格式
yaml语法:
空格严格要求,缩进严格要求(一个缩进是两个空格)
行首一般是两个空格,代表从属关系,键与值之间一般是一个空格隔开
#普通键值对
key: valuename: zhangsan#map/对象
key:k1: v1k2: v2person:name: zhangsanage: 23#list/数组
key:- v1- v2pets:- 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.Driverusername: rootpassword: 123url: jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&useUnicode=true&characterEncoding-utf-8
3、测试数据源
package org.westos.springbootdemo;@SpringBootTest
class SpringbootdemoApplicationTests {//自动导入数据源@Autowiredprivate DataSource dataSource;@Testvoid 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 mapperPUBLIC "-//mybatis.org//DTD mapper 3.0//EN"".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.pojomapper-locations: classpath:org/westos/springbootdemo/mapper/*.xml
7、创建UserController类
package org.westos.springbootdemo.controller;@RestController
public class MyBatisController {@Autowiredprivate 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页面
- 导入命名空间:
xmlns:th=""
- 使用
th:xxx
取值
<!DOCTYPE html>
<html lang="en" xmlns:th="">
<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表达式语法
发布评论