前言
说实话使用springboot已经有两年多快三年了,但是却没怎么去好好总结梳理一下关于springboot相关知识点。今天本着学习与回顾的目的打算就springboot的使用方法以及相关知识点,展开一个专题由浅入深的梳理一下springboot的相关知识点。
本次专题打算分,如下四个阶段展开:
- springboot入门–快速上手springboot
- springboot进阶–简单web开发
- springboot实战–企业级web开发
- 深入理解springboot
好了废话不多说了,进入主题开始我们的第一个章节(springboot入门–快速上手springboot)
springboot入门
目的
这篇博文主要目的是初步认识理解springboot,以一个简单实例的形式方式展开,让大家能够快速上手springboot。
开发环境
- 开发工具:IntelliJ IDEA 2017.3.5 x64
- jdk版本:java version “1.8.0_161”
- maven版本:Apache Maven 3.5.3
- MySQL版本:5.6.17
主要知识点
- 快速初始化springboot工程
- springboot controller之hello world
- springboot配置管理
- springboot数据库操作
- 简单事物管理
什么是springboot
首先我们分别看一看百度百科与springboot官网对springboot的简述。
SpringBoot是由Pivotal团队在2013年开始研发、2014年4月发布第一个版本的全新开源的轻量级框架。它基于Spring4.0设计,不仅继承了Spring框架原有的优秀特性,而且还通过简化配置来进一步简化了Spring应用的整个搭建和开发过程。另外SpringBoot通过集成大量的框架使得依赖包的版本冲突,以及引用的不稳定性等问题得到了很好的解决(摘自:百度百科)
Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can “just run”.
We take an opinionated view of the Spring platform and third-party libraries so you can get started with minimum fuss. Most Spring Boot applications need minimal Spring configuration.(摘自:spring官网)
通过百度百科和spring官网对springboot的介绍我们可以知道,springboot是spring全新一代的轻量级框架,其主要目是为了简化spring应用的配置。并且通过依赖管理等方式,使得很多原本需要通过复杂配置的基础工程,都能实现一键式的开箱即用。
这里我们只对springboot是什么做一个简单的概述,要想彻底弄明白它到底是个啥,后面的章节会详细介绍。因为经验告诉我们,很多东西用着用着就这道它到底是个啥了。
当然如果你阅读官方文档的能力比较强,直接阅读springboot官方文档,那才是最好的学习springboot的文档,作为一个开发者如果你的外语水平比较好,还是建议多去阅读一下官方文档。
第一个springboot工程构建
springboot工程构建方法
通常springboot工程的构建方法有两种:
- 通过springboot工程初始化网站–start.spring.io初始化springboot应用
- 通过IntelliJ IDEA等IDE工具初始化springboot应用
构建步骤(IntelliJ IDEA)
- 打开idea点击file->new->project选择Spring Initializr
我们会发现其实通过idea构建springboot工程,其实还是通过start.spring.io来构建的。
- 点击Next输入group artifactid等信息,选择Java版本为Java8。
- 点击Next选择springboot的版本,我这里选择的是2.3.3,选择需要添加的依赖(启动器),此时我们只需要一个Web启动器即可。当然对于springboot的版本,你也可以选择其他版本,但是不要选择SNAPSHOT版本。
-
点击Next,点击Finish完成项目创建,其实截止到这里我们已经完成了工程的构建,但是因为我们还要进行后续springboot进阶的学习,所以我们这里还有一个工作要做,就是你用git进行工程初始化,以便于后续我们将代码托管到github。
-
利用git bash进入工程目录输入git init初始化工程,接着检出一个功能分支feature/primer-springboot用于我们这次springboot入门的开发。
-
新建一个controller包,在controller包下新建一个HelloController类,按照springmvc的使用方式创建一个测试接口
@RestController
public class HelloController {
@GetMapping("/hello")
public Map<String, Object> hello(){
Map<String, Object> result = new HashMap<>();
result.put("msg", "Hello springboot");
return result;
}
}
- 运行启动类LearnSpringbootApplication启动该应用,如果程序没有报错。在浏览器输入localhost:8080/hello能正常返回结果信息,则说明我们的第一个springboot应用启动成功了。
springboot配置管理
配置简介
springboot因为约定优于配置,对于每一个springboot应用都会默认创建一个并且引入application.properties文件,对于许多配置信息我们也只需遵循约定优于配置即可。例如指定服务运行端口端口为8081,只需在application.properties配置文件中,添加server.port=8081即可,淡然springboot也支持yaml文件格式,我们可以将默认的application.properties文件修改为application.yml。
# tomcat端口号
server:
port: 8081
自定义属性
自定义单个属性
- 定义单个属性
# 自定义属性
num: 1
value: ${num}
- 获取单个属性
@Value("${num}")
private Integer num;
@Value("${value}")
private Integer value;
@GetMapping("value")
public String getValue(){
return "num is\t" + num + "\t" + "value is\t" + value;
}
自定义多个属性
# 自定义多个属性
learn:
subject: springboot
time: 2h
grade: primer
@Component
@ConfigurationProperties(prefix = "learn")
public class LearnConfig {
private String subject;
private String time;
private String grade;
public LearnConfig() {
}
public LearnConfig(String subject, String time, String grade) {
this.subject = subject;
this.time = time;
this.grade = grade;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
public String getGrade() {
return grade;
}
public void setGrade(String grade) {
this.grade = grade;
}
}
- 获取多个属性
@Autowired
private LearnConfig learnConfig;
@GetMapping("/config")
public Map<String, Object> getConfig(){
Map<String, Object> result = new HashMap<>();
result.put("msg", learnConfig);
return result;
}
不同环境配置管理
对于springboot的配置管理也非常简单,我们只需要建立不同环境的配置文件,然后在发布程序的时候指向对应的发布环境即可。例如:
- 配置
- 建立开发环境配置文件:application-dev.yml
- 建立生产环境配置文件:application-prod.yml
- 在主配置文件中application.yml添加spring.profiles.active=dev或者prod分别指向对应的环境。
spring:
profiles:
active: dev
- 发布
- 使用java -jar -Dspring.profiles.active=prod target/learn-springboot-0.0.1-SNAPSHOT.jar命令启动服务指向要发布的环境。
Controller层应用
restful api 接口
package com.itxiaoyuaiit.learnspringboot.controller;
import model.User;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.Map;
/**
* @ClassName RestController
* @Description Restful Api 测试
* @Author wuyuqing
* @Date 2020/8/23 19:42
* @Version 1.0
*/
@RestController
public class RestFulApiController {
/**
* C
* @return result
*/
@PostMapping("/user")
public Map<String, Object> create(@RequestBody User user){
Map<String, Object> result = new HashMap<>();
result.put("msg", user);
return result;
}
/**
* R
* @return result
*/
@GetMapping("/user/{id}")
public Map<String, Object> reader(@PathVariable("id") String id){
Map<String, Object> result = new HashMap<>();
result.put("msg", id);
return result;
}
/**
* U
* @return result
*/
@PutMapping("/user")
public Map<String, Object> update(@RequestBody User user){
Map<String, Object> result = new HashMap<>();
result.put("msg", user);
return result;
}
/**
* D
* @return result
*/
@DeleteMapping("/user/{id}")
public Map<String, Object> detele(@PathVariable("id") String id){
Map<String, Object> result = new HashMap<>();
result.put("msg", id);
return result;
}
}
页面返回接口
- 添加模板引擎
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
- 添加简单模板页面
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div style="text-align: center;margin:0 auto;width: 1000px; ">
你的学习的科目 <span th:text="${config.subject}"></span><br>
你的学习的时间 <span th:text="${config.time}"></span><br>
你的学习的难度 <span th:text="${config.grade}"></span><br>
</div>
</body>
</html>
- 添加页面返回接口
package com.itxiaoyuaiit.learnspringboot.controller;
import com.itxiaoyuaiit.learnspringboot.config.LearnConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
/**
* @ClassName IndexController
* @Description TODO
* @Author wuyuqing
* @Date 2020/8/23 19:36
* @Version 1.0
*/
@Controller
public class IndexController {
@Autowired
private LearnConfig learnConfig;
@GetMapping("index")
public String index(Model model) {
model.addAttribute("config", learnConfig);
return "index";
}
}
需要注意当使用thymeleaf作为模板引擎,返回html页面时,应该使用@Controller注解而不是@RestController,@RestController实际上等于@Controller+@ResponseBody。
springboot数据操作
这里我们使用spring-boot-starter-data-jpa来对数据进行操作,spring-boot-starter-data-jpa只是一套规范默认采用hibernate实现,hibernate框架对于我们的单标操作,以及ORM逆向工程使用起来都特变简单。所以我们这里使用springboot官方推荐的spring-boot-starter-data-jpa来进行数据库的相关操作。
数据库操作步骤
- 添加jpa依赖
<!-- jpa -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- mysql链接 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
- 添加数据库配置
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/springboot?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT
username: root
password: ******
jpa:
hibernate:
ddl-auto: update
show-sql: true
- 添加数据库操作接口dao,其实这里因为使用是hibernate框架,所以该接口叫做*repository更加合理。
package com.itxiaoyuaiit.learnspringboot.dao;
import com.itxiaoyuaiit.learnspringboot.model.User;
import org.springframework.data.jpa.repository.JpaRepository;
/**
* @InterfaceName UserDao
* @Description TODO
* @Author wuyuqing
* @Date 2020/8/23 23:55
* @Version 1.0
*/
public interface UserDao extends JpaRepository<User, Integer> {
}
- 编辑CRUD控制层接口
package com.itxiaoyuaiit.learnspringboot.controller;
import com.itxiaoyuaiit.learnspringboot.dao.UserDao;
import com.itxiaoyuaiit.learnspringboot.model.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
/**
* @ClassName RestController
* @Description Restful Api 测试
* @Author wuyuqing
* @Date 2020/8/23 19:42
* @Version 1.0
*/
@RestController
public class RestFulApiController {
@Autowired
private UserDao userDao;
/**
* C
* @return result
*/
@PostMapping("/user")
public Map<String, Object> create(@RequestBody User user){
Map<String, Object> result = new HashMap<>();
user = userDao.save(user);
result.put("msg", user);
return result;
}
/**
* R
* @return result
*/
@GetMapping("/user/{id}")
public Map<String, Object> reader(@PathVariable("id") Integer id){
User user = userDao.findById(id).get();
Map<String, Object> result = new HashMap<>();
result.put("msg", user);
return result;
}
/**
* U
* @return result
*/
@PutMapping("/user")
public Map<String, Object> update(@RequestBody User user){
Map<String, Object> result = new HashMap<>();
user = userDao.save(user);
result.put("msg", user);
return result;
}
/**
* D
* @return result
*/
@DeleteMapping("/user/{id}")
public Map<String, Object> detele(@PathVariable("id") Integer id){
Map<String, Object> result = new HashMap<>();
userDao.deleteById(id);
result.put("msg", id);
return result;
}
}
- 至此我们的springboot快速入门就到此结束了,源码地址
总结
该章节主要用于springboot的快速入门,主要涉及以下springboot相关的知识。
- 什么是springboot
- springboot工程构建
- springboot配置管理
- springboot Controller使用
- springboot简单页面返回
- springboot jpa数据库操作