简介
SprintBoot是一款快速开发框架,能够帮助我们快速整合第三方框架
- 不同于SSM项目繁琐的xml配置,SpintBoot去除了xml配置
- 全部采用注解化的方式配置
- 内嵌Tomcat,运行就会启动Tomcat。不需要打包成war包再启动Tomcat
- SpringBoot框架默认的情况下spring-boot-starter-web已经帮助我们整合好SpingMVC框架
快速入门
创建Maven工程
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mayikt</groupId>
<artifactId>springboot-helloworld</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.8.RELEASE</version>
</parent>
<dependencies>
<!--Spring SpringMVC -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<!--
spring-boot-starter-parent
在pom.xml中引入spring-boot-start-parent,spring官方的解释叫什么stater poms,它可以提供dependency management,也就是说依赖管理,
引入以后在申明其它dependency的时候就不需要version了,后面可以看到。
-->
<!--
spring-boot-starter-web
-->
</project>
@RestController的作用
在main的java目录下新建package,com.benson.service
不写controller是因为它还有视图层,规范写service
SpringBoot的启动方式
如果用的是@Controller,要记得在getUser方法上@ResponseBody
再新建一个service
MemberService.java
package com.benson.service;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class MemberService {
@RequestMapping
public String getMember(){
return "member";
}
}
此刻回到测试类执行程序,肯定是访问不到/getMember的,因为只设置了HelloworldService
可以在HelloworldService.java那设置扫包注解
@ComponentScan("com.benson.service")//扫描service这个包下所有类
最常用的启动方式
在Service类所在的包下新建个启动类,就是Application.java也可以加APP.java,名字不重要
而Service类就不需要写@EnableAutoConfiguration和@ComponentScan了
HelloworldService.java
package com.benson.service;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloworldService {
/**
* @RestController 与@Controller之间区别
* 如果在类上加上@RestController,该类中所有SpringMVCUrl接口映射都是返回json格式
* 它的效果就是在每个方法上加上@ResponseBody注解 返回json格式
* @RestController 是我们SpringMVC提供 而不是Springboot提供
* <p>
* Rest 微服务接口开发中 Rest风格 数据传输格式json格式 协议http协议
* <p>
* Controller 控制层注解 SpringMVCUrl接口映射 默认的情况下返回页面跳转
* @Controller 如果需要返回json格式的情况下需要使用@ResponseBody注解
*/
@RequestMapping("/getUser")
public String getUser(){
return "benson";
}
}
MemberService.java
package com.benson.service;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class MemberService {
@RequestMapping("/getMember")
public String getMember(){
return "member";
}
}
Application.java
package com.benson.service;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
/* @SpringBootApplication
* 将@EnableAutoConfiguration和@ComponentScan组合在一起
* @ComponentScan的范围是当前启动类所在的包或子包
* */
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class);
}
}
整合静态资源访问
我们在开发Web应用的时候,需要引用大量的js、css、图片等静态资源。
直接往resources里放一张图片,然后访问,发现会404
在resources下新建static目录,再往里面放一张图片
yml和properties配置
properties
实际开发中绝大多数时候使用的是yml配置,配置文件放在resources下
application.properties(默认名字一定要是application)
benson.name=benson
benson.age=18
yml
properties繁琐在每次都要写benson
application.yml
benson:
name: benson
age: 18
属性:后要加空格,编译器好识别 name:空格benson
整合模板引擎thymeleaf
<!--引入thymeleaf的依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
application.yml
###ThymeLeaf配置
spring:
thymeleaf:
#prefix:指定模板所在的目录
prefix: classpath:/templates/
#check-tempate-location: 检查模板路径是否存在
check-template-location: true
#cache: 是否缓存,开发模式下设置为false,避免改了模板还要重启服务器,线上设置为true,可以提高性能。
cache: true
suffix: .html
encoding: UTF-8
mode: HTML5
渲染是控制器层做的事,所以新建个controller包,controller层负责页面的跳转,service层负责业务逻辑
要完成通过渲染来将对象的值扔到页面上,所以再建个实体类entity包。把启动类APP扔到benson包下
再在resources建个templates目录用来存放模板文件
ThymeleafController.java
package com.benson.controller;
import com.benson.entity.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServletRequest;
@Controller
public class ThymeleafController {
@RequestMapping("/MyThymeleaf")
public String MyThymeleaf(HttpServletRequest request){
request.setAttribute("user",new User("benson",18));
return "MyThymeleaf";
}
}
User.java
package com.benson.entity;
public class User {
private String userName;
private Integer age;
public User(String userName, Integer age) {
this.userName = userName;
this.age = age;
}
public String getUserName() {
return userName;
}
public Integer getAge() {
return age;
}
public void setUserName(String userName) {
this.userName = userName;
}
public void setAge(Integer age) {
this.age = age;
}
}
myThymeleaf.html
<!DOCTYPE html>
<!--需要在HTML文件中加入以下语句: -->
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Show User</title>
</head>
<body>
<table>
姓名:<span th:text="${user.userName}"></span>
年龄:<span th:text="${user.age}"></span>
</table>
</body>
</html>
原生的HttpServletRequest会导致idea在html会误报,可以把参数从对象扔到Map里
循环、判断语句
整合JdbcTemplate
建表
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(32) NOT NULL COMMENT '用户名称',
`age` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
引入pom
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.21</version>
</dependency>
配置yml
datasource:
url: jdbc:mysql://localhost:3306/test
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
UserService.java
package com.benson.service;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserService {
@Autowired
private JdbcTemplate jdbcTemplate;//拿到jdbc的模板
@RequestMapping("/insertUser")
public String insertUser(String userName, Integer age) {
int update = jdbcTemplate.update("insert into users values (null,?,?)", userName, age);
/*null是因为直接insert into要写全所有字段,id自增所以null来表示
* ?,?来防止sql注入*/
return update > 0 ? "success" : "failed";
}
}
注意!mysql驱动要改到8.0版本,不然识别不了密码