springboot(一)

SpringBoot简介

认识spring boot

spring boot 是spring家族的一个全新的框架,它整合了ssm框架,简化了配置,他通过采用大量默认配置的方式,使项目开发变得简单。有内置的Tomcat服务器,简化了部署。

特性

➢ 能够快速创建基于 Spring 的应用程序
➢ 能够直接使用 java main 方法启动内嵌的 Tomcat 服务器运行 Spring Boot 程序,不需要部署 war 包文件
➢ 提供约定的 starter POM 来简化 Maven 配置,让 Maven 的配置变得简单
➢ 自动化配置,根据项目的 Maven 依赖配置,Spring boot 自动配置 Spring、Spring mvc等
➢ 提供了程序的健康检查等功能
➢ 基本可以完全不使用 XML 配置文件,采用注解配置

四大核心

  1. 自动配置
    针对很多 Spring 应用程序和常见的应用功能,Spring Boot 能自动提供相关配置
  2. 起步依赖
    告诉 Spring Boot 需要什么功能,它就能引入需要的依赖库
  3. Actuator
    深入运行中的 Spring Boot 应用程序,一探 Spring Boot 程序的内部信息
  4. 命令行界面
    可选特性,主要针对 Groovy 语言使用

基本springboot项目介绍

构建基本springboot项目步骤

  1. 在java空项目中新建model,选中spring Initializr 直接next ,之后需要联网加载
  2. 填写坐标GAV ,注意需要删除Package 下的项目名称简写
  3. 选中web ,选择spring web,添加spring web 起步依赖,点击next
  4. 注意模块存放位置时候正确,点击next,finish

pom.xml介绍

  1. 标签parent 继承spring boot 的父级依赖
  2. GAV坐标
  3. properties 标签中方的是版本号,如果父级依赖没有,可以在这里自己定义版本号
  4. dependencies 标签存放依赖,模块创建完成默认存放spring-boot-starter-web 和spring-boot-strater-test依赖,都继承自父级依赖
  5. build 标签可以放resources和plugins标签,resources中指定需要扫描到的资源,plugins中放的是使用的插件:项目创建完成默认存放spring-boot-maven-plugin编译插件

src目录结构介绍

在这里插入图片描述
java:存放java文件,controller、service、dao、model(domain)都放在这层,但是这些java文件所在的包必须与Application同级
Application:项目的入口,放着Tomcat内置服务器
static:放静态资源,图片、js、css等资源文件
templates:存放模板文件,thymeleaf等模板文件
application.properties:主配置文件,放配置信息,像服务端口号,上下文根路径,数据源信息、切换环境等
Application.java 文件

  1. @SpringBootApplication 注解是 Spring Boot 项目的核心注解,主要作用是开启Spring 自动配置在 ,如果在 Application 类上去掉该注解,那么不会启动 SpringBoot程序
  2. main 方法是一个标准的 Java 程序的 main 方法,主要作用是作为项目启动运行的入口

配置文件介绍

核心配置格式

默认采用.properties文件格式,采用键值对的方式进行配置
也可以使用.yml或者是.yaml文件格式,主要采用一定的空格、换行等格式排版进行配置

多环境配置

多环境,就是项目有多个环境配置文件,如开发环境,测试环境,准上线环境,上线环境等,通过主配置文件进行切换环境进行项目测试
主配置文件名称不变,其他环境配置文件名称规定使用 application-环境标识.properties|yml ,例如:
application-dev.properties 开发环境核心配置文件
application-product.properties 生产环境核心配置文件
application-test.properties 测试环境核心配置文件

springboot自定义配置

除了内置配置项,还可以自定义配置项

  1. 直接在配置文件中定义
    对于在配置文件中自定义的配置(key-value),使用时需要注解@Value :@Value("${key}") ,注解需要使用在String类型变量上面
  2. 将文件声明成对象,使用其属性作为配置项,需要注解@ConfigurationProperties ,举个例子
@Component
@ConfigurationProperties(prefix = "school")
public class ConfigInfo {
	private String name;
	private String websit;
	//需要生成set/get方法,这里略
}

application.properties 配置文件

#设置内嵌 Tomcat 端口号,不设置默认8080
server.port=9090
#设置上下文根
server.servlet.context-path=/config
school.name=ssm
school.websit=http://www.baidu.com

application.yml 配置文件

server:
	port: 9090
	servlet:
		context-path: /config
school:
	name: ABC
	websit: http://www.baidu.com

在 SpringBootController 中注入 ConfigInfo 配置类

@Autowired
private ConfigInfo configInfo;

@RequestMapping(value = "/springBoot/config")
public @ResponseBody String say() {
	return configInfo.getName() + "=======" +configInfo.getWebsit();
}

运行结果
在这里插入图片描述
注意:
在 ConfigInfo 类中使用了 ConfigurationProperties 注解后,IDEA 会出现一个警告,不影响程序的执行。解决方法,添加下面的依赖即可

<!--解决使用@ConfigurationProperties 注解出现警告问题-->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-configuration-processor</artifactId>
	<optional>true</optional>
</dependency>

springboot 使用 jsp

  1. 首先springboot 项目目录中没有webapp文件夹,这就需要我们自己建一个有效的webapp文件夹
    1. 快捷键ctrl+shift+alt+s 打开项目结构Project Structure ,点击 Modules 找到需要修改的模块,点击web
    2. 接下来分两步:第一步,Deployment Descriptors 中点击 “+” ,添加web.xml ,路径是项目绝对路径\模块名\src\main\webapp\WEB-INF\web.xml ,点击OK;第二步,在Web Resource Directories 中点击 “+” ,path是项目绝对路径\模块名\src\main\webapp ;relative path 默认是 “\” ,点击OK,创建webapp文件夹,点击最下方Apply将web.xml放进对应位置
  2. 添加相关依赖,并配置resources信息
<!--引入 Spring Boot 内嵌的 Tomcat 对 JSP 的解析包,不加解析不了 jsp 页面-->
<!--如果只是使用 JSP 页面,可以只添加该依赖-->
<dependency>
	<groupId>org.apache.tomcat.embed</groupId>
	<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
<!--如果要使用 servlet 必须添加该以下两个依赖-->
<!-- servlet 依赖的 jar 包-->
<dependency>
	<groupId>javax.servlet</groupId>
	<artifactId>javax.servlet-api</artifactId>
</dependency>
<dependency>
	<groupId>javax.servlet.jsp</groupId>
	<artifactId>javax.servlet.jsp-api</artifactId>
	<version>2.3.1</version>
</dependency>
<!--如果使用 JSTL 必须添加该依赖-->
<!--jstl 标签依赖的 jar 包 start-->
<dependency>
	<groupId>javax.servlet</groupId>
	<artifactId>jstl</artifactId>
</dependency>
<build>
	<!--
	SpringBoot 要求 jsp 文件必须编译到指定的 META-INF/resources 目录下才能访问,否则访
	问不到。
	其它官方已经建议使用模版技术(后面会课程会单独讲解模版技术)
	-->
	<resources>
		<resource>
			<!--源文件位置-->
			<directory>src/main/webapp</directory>
			<!--指定编译到 META-INF/resources,该目录不能随便写-->
			<targetPath>META-INF/resources</targetPath>
			<!--指定要把哪些文件编译进去,**表示 webapp 目录及子目录,*.*表示所有文件-->
			<includes>
				<include>**/*.*</include>
			</includes>
		</resource>
	</resources>
</build>
  1. 在 application.properties 文件配置 Spring MVC 的视图展示为jsp ,这里相当于 Spring MVC 的配置
#SpringBoot 核心配置文件

#不写port和上下文根contextpath,所以默认是 8080 和 /

#配置 SpringMVC 视图解析器
#其中:/ 表示目录为 src/main/webapp
spring.mvc.view.prefix=/
spring.mvc.view.suffix=.jsp
  1. 建立controller类
@Controller
public class SpringBootController {
	@RequestMapping(value = "/springBoot/jsp")
	public String jsp(Model model) {
		model.addAttribute("data","SpringBoot 前端使用 JSP 页面!");
		return "index";
	}
}
  1. index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" >
<html>
	<head>jsp测试</head>
	<body>{data}</body>
</html>

运行结果
在这里插入图片描述

springboot 集成 mybatis

添加依赖pom.xml:mybatis整合springboot起步依赖和驱动依赖

<!--MyBatis 整合 SpringBoot 的起步依赖-->
<dependency>
	<groupId>org.mybatis.spring.boot</groupId>
	<artifactId>mybatis-spring-boot-starter</artifactId>
	<version>2.0.0</version>
</dependency>
<!--MySQL 的驱动依赖-->
<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
</dependency>

springboot核心配置文件配置数据源

#配置内嵌 Tomcat 端口号
server.port=9090
#配置项目上下文根
server.servlet.context-path=/010-springboot-web-mybatis
#配置数据库的连接信息
#注意这里的驱动类有变化
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#注意这里的localhost是本地服务,如果是远程,换上对应的IP;?后面是解决访问远程时,页面显示乱码问题
spring.datasource.url=jdbc:mysql://localhost:3306/springboot?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
#用户名、密码根据自己情况设置
spring.datasource.username=root
spring.datasource.password=123456

controller层service层和往常一样处理,这里说明下dao层

service层需要对dao层使用@Autowride自动注入,如往常一样写的话,会爆出错误提示找不到mapper文件,原因是springboot没有扫描到mapper为其生成对应的对象,无法做到自动注入。解决办法有二:

  1. 在mapper接口文件上面加上注解@Mapper
  2. 在入口类Application.java 上面加上注解@MapperScan(“mapper文件所在的包路径”)

如果mapper的xml文件放在resources目录中,需要在application.properties文件中指定

# 指定 Mybatis 映射文件的路径
mybatis.mapper-locations=classpath:mapper/*.xml

springboot 事务支持

只需两步
第一步:开启事务,在application.java 文件类的上面添加注解@EnableTransactionManagement 表示开启事务
第二步:在需要进行事务管理的方法上添加注解@Transactional

springboot下的springMVC

@Controller

表示它修饰的Controller类中的方法的返回值可以是json格式的数据,页面

@RestController

表示它修饰的Controller类中的方法的返回值都是json格式的数据,不能返回页面

@RequestMapping (常用)

支持 Get 请求,也支持 Post 请求

@GetMapping

RequestMapping 和 Get 请求方法的组合
只支持 Get 请求
Get 请求主要用于查询操作

@PostMapping

RequestMapping 和 Post 请求方法的组合
只支持 Post 请求
Post 请求主要用户新增数据

@PutMapping

RequestMapping 和 Put 请求方法的组合
只支持 Put 请求
Put 通常用于修改数据

@DeleteMapping

RequestMapping 和 Delete 请求方法的组合
只支持 Delete 请求
通常用于删除数据

举个小例子

//RestController 注解相当于加了给方法加了@ResponseBody 注解,所以是不能跳转页面
的,只能返回字符串或者 json 数据
@RestController
public class MVCController {
	@GetMapping(value = "/query")
	public String get() {
		return "@GetMapping 注解,通常查询时使用";
	}
	@PostMapping(value = "/add")
	public String add() {
		return "@PostMapping 注解,通常新增时使用";
	}
	@PutMapping(value = "/modify")
	public String modify() {
		return "@PutMapping 注解,通常更新数据时使用";
	}
	@DeleteMapping(value = "/remove")
	public String remove() {
		return "@DeleteMapping 注解,通常删除数据时使用";
	}
}

因为通过浏览器输入地址,默认发送的只能是 get 请求,通过 Postman 工具,可以模拟发送不同类型的请求,并查询结果,在安装的时候,有些机器可能会需要安装 MicroSort .NETFramework
在这里插入图片描述

springboot实现RestFul

什么是 RESTFul 风格?举个例子:
我们要访问一个 http 接口:http://localhost:8080/boot/order?id=1021&status=1
采用 RESTFul 风格则 http 地址为:http://localhost:8080/boot/order/1021/1
显而易见,之前的key=value全部改成 “/” 的形式

RESTFul 主要是几个注解实现

  1. @PathVariable
    获取 url 中的数据
    现 该注解是实现 RESTFul 最主要的一个注解
  2. @PostMapping
    接收和处理 Post 方式的请求
  3. @DeleteMapping
    接收 delete 方式的请求,可以使用 GetMapping 代替
  4. @PutMapping
    接收 put 方式的请求,可以用 PostMapping 代替
  5. @GetMapping
    接收 get 方式的请求

RESTful 的优点

➢ 轻量,直接基于 http,不再需要任何别的诸如消息协议get/post/put/delete 为 CRUD 操作
➢ 面向资源,一目了然,具有自解释性。
➢ 数据描述简单,一般以 xml,json 做数据交换。
➢ 无状态,在调用一个接口(访问、操作资源)的时候,可以不用考虑上下文,不用考虑当前状态,极大的降低了复杂度。
➢ 简单、低耦合

请求方式就是上面的例子,这里着重说@PathVariable

请求参数通过{key}来接收,注解@PathVariable 用在方法参数上,表示形参接收那个参数
代码

@RestController
public class RESTfulController {
	/**
	* 添加学生
	* 请求地址: http://localhost:9090/014-springboot-
	restful/springBoot/student/wangpeng/23
	* 请求方式: POST
	* @param name
	* @param age
	* @return
	*/
	@PostMapping(value = "/springBoot/student/{name}/{age}")
	public Object addStudent(@PathVariable("name") String name,@PathVariable("age") Integer age) {
		Map<String,Object> retMap = new HashMap<String, Object>();
		retMap.put("name",name);
		retMap.put("age",age);
		return retMap;
	}
	/**
	* 删除学生
	* 请求地址: http://localhost:9090/014-springboot-
	restful/springBoot/student/1
	* 请求方式: Delete
	* @param id
	* @return
	*/
	@DeleteMapping(value = "/springBoot/student/{id}")
	public Object removeStudent(@PathVariable("id") Integer id) {
		return "删除的学生 id 为:" + id;
	}
	/**
	* 修改学生信息
	* 请求地址: http://localhost:9090/014-springboot-
	restful/springBoot/student/2
	* 请求方式: Put
	* @param id
	* @return
	*/
	@PutMapping(value = "/springBoot/student/{id}")
	public Object modifyStudent(@PathVariable("id") Integer id) {
		return "修改学生的 id 为" + id;
	}
	@GetMapping(value = "/springBoot/student/{id}")
	public Object queryStudent(@PathVariable("id") Integer id) {
		return "查询学生的 id 为" + id;
	}
}

RestFul风格会出现的请求冲突问题

当同一类型的请求出现这样一种情况:
@PostMapping请求一:/springboot/{id}/order/{age}
@PostMapping请求二:/springboot/{age}/order/{id}
两个请求的参数值都是Integer类型的,这时服务器发出的请求不能分辨应该哪个请求,就会报错:Error Page … Ambiguous handles methods mapped for …

RESTful 原则

  1. 增 post 请求、删 delete 请求、改 put 请求、查 get 请求
  2. 请求路径不要出现动词
    例如:查询订单接口
    /boot/order/1021/1(推荐)
    /boot/queryOrder/1021/1(不推荐)
  3. 分页、排序等操作,不需要使用斜杠传参数
    例如:订单列表接口
    /boot/orders?page=1&sort=desc
    一般传的参数不是数据库表的字段,可以不采用斜杠
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值