一.springboot
springboot是用来简化Spring应用的初始搭建以及开发过程,通过约定大于配置的原则,让开发人员以最少的配置就可以开发应用。
总结:简化基于spring的应用开发
二.入门案例
1.创建一个普通web工程SpringBootDemo
1.配置Maven
2.在pom文件中以springboot为父工程
2.1错误
2.2点击File——Invalidate Caches——重启项目,不报红了
3.导入springboot的web模块依赖
4.刷新Maven
5.新建包,在包下创建启动类AppApplication
springboot中内置一个web容器,不用配置内部tomcat插件,也不用打包至外部tomcat中去运行
package com.hhh;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
//启动类
@SpringBootApplication
public class AppApplication {
public static void main(String[] args) {
SpringApplication.run(AppApplication.class,args);
}
}
6.运行此类,查看效果
6.1开头:打印了springboot的图标
6.2结尾,在其他端口中运行了(可能和安装的tomcat的8080端口冲突了,这里没有在8080端口运行)
6.3修改端口
在resources目录下新建文件为application.properties(固定名)
6.4重新启动tomcat,查看效果
7.在包hhh下新建包controller,验证这个springmvc的使用,在这包下新建HelloController
package com.hhh.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@RequestMapping("/hello")
public class HelloController {
@RequestMapping("/test1")
@ResponseBody
public String test1(){
return "Controller";
}
}
8.在浏览器中访问该路径,查看效果
三.springboot整合MyBatis
1.导入MyBatis的starter和数据库驱动
<!--导入MyBatis的starter-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.4</version>
</dependency>
<!--如果springboot的版本是2.1-2.4的话,MyBatis的版本要2.1.x-->
<!--数据库驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
1.1刷新工程
2.创建domain包,新建实体类Manager
package com.hhh.domain;
public class Manager {
private String id;
private String name;
public Manager(){
}
public Manager(String id, String name) {
this.id = id;
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Manager{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
'}';
}
}
3.创建dao包,新建dao层接口ManagerDao
注意:在dao层接口中的文件加上注解:@Mapper
package com.hhh.dao;
import com.hhh.domain.Manager;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
//加上注解
@Mapper
public interface ManagerDao {
public List<Manager> findAll();
public void insert(Manager manager);
public void delete(String id);
}
4.在resources目录下创建com/hhh/dao包,在包下创建sql文件ManagerDao.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="com.hhh.dao.ManagerDao">
<select id="findAll" resultType="com.hhh.domain.Manager">
SELECT * FROM manager1
</select>
<!--这里的manager1为ssmframe数据库中的其中一个表-->
</mapper>
5.在resources目录下配置文件application.properties,在里面配置数据库连接的信息
#端口设置
server.port=8081
#数据库连接设置
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/ssmframe
spring.datasource.username=root
spring.datasource.password=hyt123456
#别名设置和到sql文件扫描路径的配置
mybatis.type-aliases-package=com.hhh.domain
mybatis.mapper-locations=classpath:com/hhh/dao/*.xml
6.在HelloController类中注入dao层接口,利用注解@Autowire的注入
package com.hhh.controller;
import com.hhh.dao.ManagerDao;
import com.hhh.domain.Manager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.List;
@Controller
@RequestMapping("/hello")
public class HelloController {
@Autowired
private ManagerDao managerDao;
@RequestMapping("/test1")
@ResponseBody
public String test1(){
return "Controller";
}
@RequestMapping("/findAll")
@ResponseBody
public List<Manager> findAll(){
return managerDao.findAll();
}
}
7.启动tomcat,查看效果
8.在浏览器中访问,查看效果
四.springboot对静态资源的处理
1.默认情况,springboot将resources/static文件夹作为静态资源的存放目录
访问路径是:项目根目录/静态资源路径
1.在resources目录下新建包为static。在包下新建index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>index</title>
</head>
<body>
<h1>首页</h1>
</body>
</html>
2.启动tomcat,在浏览器中访问,查看效果
3.在static包下新建文件aaa,在aaa文件下新建一个test.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Test</title>
</head>
<body>
<h2>测试</h2>
</body>
</html>
4.启动tomcat,在浏览器中访问,查看效果
2.通过配置文件来调整静态资源的存放路径和访问路径
1.在resources目录下新建文件夹为html,在该文件夹下新建test2.html
2.在application.properties文件中配置静态资源的存放路径和访问路径
#配置静态资源的存放路径和访问路径
spring.web.resources.static-locations=classpath:/html/
spring.mvc.static-path-pattern=/**
#斜杆或者斜杆后面的路径都能访问
3.启动tomcat,在浏览器中访问test2文件,查看效果
五.springboot读取配置文件内容
1.在application.properties文件中添加内容,获取其中内容在前端输出
#自己设置的内容,想让springboot读取这内容返回至前端,添加如下设置
hhh.name=aaa
hhh.age=20
2.在一个bean中使用@Value注解来读取
2.1在HelloController文件中去读取该项内容的值,做出如下设置
package com.hhh.controller;
import com.hhh.dao.ManagerDao;
import com.hhh.domain.Manager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Controller
@RequestMapping("/hello")
public class HelloController {
/*2.在该变量前添加注解@Value,里面填写对应键值对,对应配置文件中的项目名*/
@Value("${hhh.name}")
/*1.在该类下定义变量和配置文件中添加的一一对应*/
private String name;
@Value("${hhh.age}")
private String age;
@Autowired
private ManagerDao managerDao;
@RequestMapping("/test1")
@ResponseBody
public String test1(){
return "Controller";
}
@RequestMapping("/findAll")
@ResponseBody
public List<Manager> findAll(){
return managerDao.findAll();
}
/*3.创建方法读取内容*/
@RequestMapping("/getConfig")
@ResponseBody
public Map<String,String> test2(){
Map map=new HashMap();
map.put("name",name);
map.put("age",age);
return map;
}
}
2.2启动这个工程,访问这个新建的controller,查看效果
3.使用@ConfigurationProperties注解
建立一个实体类和配置文件里的配置对应起来,加入到soring容器里头,需要用的时候直接注入
3.1正在domain包下新建一个类HConfigProperties
package com.hhh.domain;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
//用来读取自定义配置的类
@ConfigurationProperties(prefix = "hhh")
@Component
public class HConfigProperties {
private String name;
private String age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}
3.2在controller包下新建一个类ConfigController,在该文件中去读取该项内容的值
package com.hhh.controller;
import com.hhh.domain.HConfigProperties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.HashMap;
import java.util.Map;
@Controller
@RequestMapping("/config")
public class ConfigController {
//将HConfigProperties当做一个变量使用
@Autowired
//通过注解自动注入,在HConfigProperties类中有加@Component注解
private HConfigProperties hConfigProperties;
@RequestMapping("/getConfig2")
@ResponseBody
public Map<String,String> test2(){
Map map=new HashMap();
map.put("name",hConfigProperties.getName());
map.put("age",hConfigProperties.getAge());
return map;
}
}
3.3启动工程,在浏览器中访问,查看效果
3.4该注解的优势
在其他类想使用自定义配置类时,直接使用@Autowired直接注入即可使用,底下直接调方法,不用声明变量
六.springboot自动配置的原理
1.启动时会扫描自动类所在的包和其子包,把有@Component注解修饰的类都加入到spring容器中
Configuration注解也被@Component注解修饰了,所以所有的配置类也会被加到spring容器中,Controller注解同理
2.自动配置的原理
@SpringBootApplication——>@EnableAutoConfiguration ——>@Import——>AutoConfigurationImportSelector 这个类中有一个getCandidateConfiguration方法。此方法加载所有自动配置包下的META-INF/spring.factories文件,这个文件中会给出自动配置的入口类 org.springframework.boot.autocinfigure.EnableAutoConfiguration=xxx
2.1mybatis自动配置的原理
org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration
2.2springmvc自动配置的原理
配置前端控制器
org.springfrmaework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration
配置mvc
org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration
七.自定义一个springboot的starter
1.新建一个工程SpringBoot_Starter
1.1设置maven
1.2导入对应功能的starter,在pom文件中以springboot为父工程
2.springboot自动配置的关键是:META-INF/spring.factories
2.1在resources目录下新建目录为META-INF,再去新建文件为spring.factories
2.2在starter包下新建类为HService
package com.starter;
public class HService {
//定义一个方法
public String say(){
return "hello springboot starter" ;
}
}
2.3在java目录下创建包为com/starter/config,在config包下创建自动配置类HAutoConfiguration
package com.starter.config;
import com.starter.HService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration //这是一个自动配置类
public class HAutoConfiguration {
//把service注入到spring容器中
@Bean
public HService hService(){
return new HService();
}
}
2.4 在spring.factories文件中写配置
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
//斜杆表示换行,值为自动配置类的全路径
com.starter.config.HAutoConfiguration
2.5这个starter需要打成一个jar包放入maven仓库里头,打jar包之前,记得将pom文件中设置的打成war包注释掉,否则打成war包而不是jar包了
3.在上一个工程SpringBootDemo中将starter引入
3.1starter坐标
<groupId>org.example</groupId>
<artifactId>SpringBoot_Starter</artifactId>
<version>1.0-SNAPSHOT</version>
3.2引入starter(报错)
3.3在controller包下新建一个类ControllerStarter用来测试
package com.hhh.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@RequestMapping("hello")
public class ControllerStarter {
@Autowired
private HSerives hSerives;
@RequestMapping("/getStarter")
@ResponseBody
public String test1(){
return hSerives.say();
}
}