1. 概述
1.1 什么是SpringBoot
springBoot
SpringBoot是Spring项目中的一个子工程,与我们所熟知的Spring-framework 同属于spring的产品,设计目的是用来简化新Spring应用的初始搭建以及开发过程
最主要作用就是帮我们快速的构建庞大的spring项目,并且尽可能的减少一切xml配置,做到开箱即用,迅速上手,让我们关注与业务而非配置
1.2 为什么要学习SpringBoot
之前
① 复杂的配置
项目各种配置其实是开发时的消耗,写配置挤占了写应用程序逻辑的时间
② 混乱的依赖管理
项目当中添加很多库已经很麻烦了,还要知道这些库的哪个版本和其他库不会有冲突,一旦选错了依赖的版本,随之而来的不兼容问题就会造成项目的致命性伤害
现在
① Spring Boot 简化了基于Spring的应用开发
② 只需要“run”就能创建一个独立的、生产级别的Spring应用
③ Spring Boot为Spring平台及第三方库提供开箱即用的设置
1.3 SpringBoot特点
① 为所有 Spring 的开发者提供一个非常快速的、广泛接受的入门体验
② 开箱即用,通过简单的配置,简化了以前复杂配置操作
③ 提供了一些大型项目中常见的非功能性特性,如内嵌服务器、安全、指标,健康检测、外部化配置等
④ 无需 XML 配置
1.4 springBoot功能
① 以jar包方式独立运行(jar -jar xxx.jar)
② 内嵌Servlet容器(tomcat, jetty),无需以war包形式部署到独立的servlet容器中
③ 提供starter简化maven依赖包配置
④ 自动装配bean(大多数场景)
⑤ 提倡使用java配置和注解配置结合而无需xml配置
2. springBoot快速入门
① 创建Maven工程
② 引入springBoot依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.3.RELEASE</version>
</parent>
③ 添加springBoot启动器依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
在第二步的parent里面规定了版本号,之后就不用再应用版本号,且在第二步添加了启动器后web工程常用的依赖会自动帮你引入
④ 编写启动类,并添加注解
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class,args);
}
}
在这一步后运行已经可以连通服务器了,因为springBoot内置了tomcat
⑤ 编写Conroller直接访问
@Controller
public class MyController {
@RequestMapping("hello")
@ResponseBody
public String hello(){
return "hello";
}
}
当你在第三步配置了web启动器,他就会自动把你的tomcat,SpringMVC等引入
如遇到spring boot run启动时非常缓慢使用以下方法
-
在命令行中输入hostname 查询当前主机名称
-
到C盘Windows\System32\drivers\etc中找到host文件
-
复制一份其它地方进行编辑,编辑时在hostname之后添加.local
-
注意事项: 127.0.0.1和local之间是两个tab 不是空格
⑥ 热部署配置
引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
3. 编写配置
1. springBoot默认使用servlet3.0 可以没有web.xml
2. 没有任何的xml,我们想要做一些自定义的配置,比如数据库相关的信息,该如何配置?
springBoot已经帮助我们做了大量的配置,剩下的使用java配置
3. SpringBoot进行Java配置
springBoot当中java配置主要靠java类和一些注解代替xml
① @Configuration:声明一个类作为配置类,代替xml文件
② @Bean:声明在方法上,将方法的返回值加入Bean容器,代替标签
③ @value:属性注入
④ @PropertySource:指定外部属性文件
创建配置类,引入jabc.properties
//声明一个类作为配置类,代替xml文件
@Configuration
//@PropertySource:指定外部属性文件
@PropertySource("classpath:jdbc.properties")
public class JdbcConfig {
//@value:属性注入
@Value("${jdbc.url}")
String url;
@Value("${jdbc.driverClassName}")
String driverClassName;
@Value("${jdbc.username}")
String username;
@Value("${jdbc.password}")
String password;
/*方法的返回值就是一个bean对象
* 就可以使用@autoWare进行注入
* */
//@Bean:声明在方法上,将方法的返回值加入Bean容器,代替<bean>标签,交给spring容器管理
@Bean
public DataSource dataSource() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setUrl(url);
dataSource.setDriverClassName(driverClassName);
dataSource.setUsername(username);
dataSource.setPassword(password);
return dataSource;
}
}
在控制器使用
@Controller
public class HelloController {
@Autowired
private DataSource dataSource;
@RequestMapping("hello")
@ResponseBody
public String hello(){
return "hello spring boot"+dataSource;
}
}
4. 在configuration配置文件中的属性都要手动注入,可以使用springBoot的属性注入方法,把属性都放在application.properties文件中,然后创建一个类加载属性,以后再配置文件中直接去类里面拿属性即可
① 创建application.properties(必须叫这个),并把属性放入,会自动加载
② 创建一个类加载属性,在类上加上@ConfigurationProperties注解,就会自动的根据application.properties中的属性,对该类中的属性赋值(通过set方法,所有要提供set方法)今后就可以重复使用这个类
③ 在config中直接使用即可
5. yaml文件方式
配置文件除了使用application.properties类型,还可以是后缀名为:.yml或.yaml的类型,也会自动的加载
YAML是一种简洁的非标记语言,是以数据为中心,使用空白缩进,分行组织数据,从而使得表示更加简洁易读
如果有两个配置文件一个.properties和一个.yml,会取两个并集,如果有相同的名称,会以properties为主
SSM整合
- 创建maven工程,引入springBoot依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.3.RELEASE</version>
</parent>
- 添加springBoot启动器依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
- 编写启动类Application
package com.javaer;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class,args);
}
}
- 整合Mybatis
① 添加JDBC启动器
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
② 添加MySql数据库驱动
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
③ 配置连接参数(application.yml)
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/springboot?useUnicode=true&useJDBCCompliantTimezoneShift=true&serverTimezone=UTC&characterEncoding=utf8
username: root
password: 1234
④ 添加Mybatis启动器
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
⑤ 配置Mybatis(application.yml)
mybatis:
# mapper文件所在的位置在resources下的mapper文件夹
mapper-locations: mapper/*.xml
# 别名
type-aliases-package: pojo
configuration:
# 开启驼峰命名
map-underscore-to-camel-case: true
⑥ 创建mapper接口(resources和java下分别都有一个mapper包,resources下放.xml文件,java下放接口文件)
⑦ 在Application启动类添加注解扫描接口mapper自动注入到spring
package com.javaer;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.javaer.mapper")
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class,args);
}
}
- 接下来就和之前ssm三层架构的写法一样了
注意
① 如果出现
解决方法:
在pom添加
<build>
<finalName>Spring</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0.2</version>
<executions>
<execution>
<id>default-compile</id>
<configuration>
<compilerArgument>-proc:none</compilerArgument>
<source>1.8</source>
<target>1.8</target>
</configuration>
</execution>
<execution>
<id>default-testCompile</id>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
解决方法2
升级lombok
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>10</source>
<target>10</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.projectlombok</groupId>
<artifactId>lombok-maven-plugin</artifactId>
<version>1.16.20.0</version>
</plugin>
</plugins>
</build>
② 如果出现mapper无法自动注入解决方案
- application.yml完整配置
server:
port: 80
spring:
mvc:
servlet:
load-on-startup: 1
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/springboot?useUnicode=true&useJDBCCompliantTimezoneShift=true&serverTimezone=UTC&characterEncoding=utf8
username: root
password: 1234
mybatis:
# mapper文件所在的位置
mapper-locations: mapper/*.xml
# 别名
type-aliases-package: pojo
configuration:
# 开启驼峰命名
map-underscore-to-camel-case: true
- 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.javaer</groupId>
<artifactId>SpringBootPro</artifactId>
<version>1.0</version>
<!--springboot依赖-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.3.RELEASE</version>
</parent>
<dependencies>
<!--springboot启动器依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--热部署-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.6</version>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!--jdbc启动器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!--添加Mysql数据库驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- mybatis启动器-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
</dependencies>
<build>
<finalName>Spring</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0.2</version>
<executions>
<execution>
<id>default-compile</id>
<configuration>
<compilerArgument>-proc:none</compilerArgument>
<source>1.8</source>
<target>1.8</target>
</configuration>
</execution>
<execution>
<id>default-testCompile</id>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
通用Mapper
通用Mapper都可以极大的方便开发人员。可以随意的按照自己的需要选择通用方法,还可以很方便的开发自己的通用方法。极其方便的使用MyBatis单表的增删改查。
只支持单表
① 引用启动器(这个启动器已经继承了mybatis,引入了就不用引入mybatis)
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>2.1.5</version>
</dependency>
② 在Application启动类上添加通用mapper扫描注解@MapperScan(“com.javaer.mapper”)(注意,引入的是tk.mybatis)
③ mapper接口继承Mapper<实体>
④ 在实体类配置属性
@Table 配置表名
@Id 配置主键
@KeySql 配置主键自动增长