文章目录
- 1 SpringBoot01
- 1.1 SpringBoot
- 1.2 SpringBoot 入门示例
- 1.3 添加配置文件
- 1.4 SpringBoot 运行原理
- 1.5 SpringBoot 整合 Druid
- 1.6 SpringBoot 整合 MyBatis![20201204193611473](https://i-blog.csdnimg.cn/blog_migrate/7dc265f0105846f4bbcf13fc2f5aa0d9.png#pic_center)
- 1.7 SpringBoot 整合 PageHelper 插件
- 1.8 SpringBoot 创建 web 项目
- 1.9 SpringBoot 整合 junit 测试
1 SpringBoot01
1.1 SpringBoot
Just run
1.2 SpringBoot 入门示例
1.2.1 初始化 springboot 项目
https://spring.io/projects/spring-boot
在官方网站中点击 Spring Initializr 进行项目的初始化 完成后下载
1.2.2 导入 project 到 Idea
1.2.3 编写 controller 用于测试
@RestController
public class HelloController {
@RequestMapping("/hello")
public String hello(){
return "hello Java";
}
}
// @RestController注解是一个组合注解,包含@Controller和@ResponseBody两个注解
// 主要作用是将当前类作为控制层的组件添加到Spring容器中
// 同时该类中所有方法的返回值不是以页面视图名而是以JSON格式对象的形式返回;
1.2.4 启动项目
启动入门类进行测试
在启动日志中可以查看默认端口和上下文路径
1.2.5 测试结果
1.2.6 查看 pom
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!--
继承 SpringBoot 的父 pom 文件
-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.11.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<!-- 项目信息 -->
<groupId>com.cl</groupId>
<artifactId>springboot_demo01</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot_demo01</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!-- web 依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- test 依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<!-- 启动 maven 插件-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
// <parent>标签中添加的依赖是Spring Boot框架集成项目的统一父类管理依赖,添加该依赖后就可以使用Spring // Boot的相关特性;
// <version>标签指定Spring Boot的版本号
// <dependencies>标签中添加的spring-boot-starter-web依赖是Spring Boot框架对Web开发场景集成支持
// 的依赖启动器,添加该依赖后就可以自动导入Spring MVC框架相关依赖进行Web开发
1.3 添加配置文件
springboot 默认加载的配置文件为 classpath 根目录的 application.properties 或者 application.yml配置文件
1.3.1 配置 web 服务器参数
application.properties
# 配置端口
server.port=8081
# 配置上下文路径
server.servlet.context-path=/demo01
application.yml
# 配置端口
server:
port: 8082
# 配置上下文路径
servlet:
context-path: /demo02
1.3.2 多配置文件支持
1.3.2.1 *.properties 配置
application.properties
spring.profiles.active=port,context
application-port.properties
server.port=8080
appliction-context.properties
server.servlet.context-path=/demo01
1.3.2.2 *.yml 配置
application.yml
spring:
profiles:
active: port,contextPath
application-port.yml
server:
port: 8083
application-contextPath.yml
server:
servlet:
context-path: /demo03
1.3.3 自定义属性
1.3.3.1 注入依赖
<!--添加自定义属性依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
1.3.3.2 入口类启动自定义属性支持
@EnableConfigurationProperties({User.class, Stu.class})
1.3.3.3 编写自定义属性类
package config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
/**
* @Author chenlan
* @Date 2020/12/2 17:10
* @Description
* prefix 添加前缀
* ignoreUnknownFields 忽略未知的字段
* ignoreInvalidFields 忽略验证失败的字段
*
*/
@Data
@ConfigurationProperties(prefix = "com.cl.stu",ignoreInvalidFields = true)
public class Stu {
private String sName;
private String sAge;
}
1.3.3.4 编写配置文件
com.cl.user.username=cl
com.cl.user.password=526494
com.cl.stu.sName=cl
com.cl.stu.sAge=12
1.3.3.5 编写测试类
@SpringBootTest
class SpringbootDemo02ApplicationTests {
@Autowired
private User user;
@Autowired
private Stu stu;
@Test
void contextLoads() {
System.out.println(user.getUsername());
System.out.println(user.getPassword());
}
@Test
public void test01(){
System.out.println(stu.getSName());
System.out.println(stu.getSAge());
}
}
效果图:
1.4 SpringBoot 运行原理
@SpringBootApplication
public class SpringbootDemo02Application {
public static void main(String[] args) {
SpringApplication.run(SpringbootDemo02Application.class, args);
}
}
1.在入口执行类调用 SpringApplication 静态方法run() 加载入门执行类,加载了入门类上的@SpringBootApplication 注解
2.@SpringBootApplication 中定义了多个注解,其中:
@SpringBootConfiguration 注解本类为配置类,所以本质上入口启动类就是一个配置类
@EnableAutoConfiguration 启动时自动加载所需配置类
@ComponentScan 启动时扫描当前包以及子包的组件类
1.5 SpringBoot 整合 Druid
1.5.1 注入依赖
<!--添加 jdbc 依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!--添加 druid 依赖-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
<!--添加 mysql 依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.49</version>
</dependency>
1.5.2 在配置文件中添加 Druid 相关参数
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
username: root
password: root
url: jdbc:mysql://localhost:3306/demo?characterEncoding=utf-8
druid:
# 初始化大小
initial-size: 5
# 最小连接数
min-idle: 5
# 最大连接数
max-active: 20
# 等待超时时间
max-wait: 60000
1.5.3 测试
@SpringBootTest
class SpringbootDemo02ApplicationTests {
@Autowired
private DataSource dataSource;
@Test
public void testDataSource() throws SQLException {
System.out.println(dataSource.getConnection());
}
}
1.6 SpringBoot 整合 MyBatis
1.6.1 在整合 Druid 的基础上添加 Mybatis 依赖
<!--添加 mybatis 依赖-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>
<!--添加 lombok 依赖-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
1.6.2 编写 mapper 以及 pojo
pojo:
package com.cl.pojo;
import lombok.Data;
/**
* @Author chenlan
* @Date 2020/12/2 19:36
* @Description TODO
*/
@Data
public class User {
private Integer id;
private String name;
private Integer age;
}
mapper:
package com.cl.mapper;
import com.cl.pojo.User;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Options;
import org.apache.ibatis.annotations.Select;
import java.util.List;
/**
* @Author chenlan
* @Date 2020/12/2 19:35
* @Description TODO
*/
public interface UserMapper {
/**
* 查询所有数据 测试接口方法
*
* @return User 集合
*/
@Select("select* from user")
List<User> selectUser();
/**
* 添加数据 测试接口方法
*
* @param user
* @return
*/
@Insert("insert into user(name,age) values(#{name},#{age})")
@Options(keyColumn = "id", keyProperty = "id", useGeneratedKeys = true)
int insertUser(User user);
}
1.6.3 在入口类添加映射接口扫描注解
package com.cl;
import config.Stu;
import config.User;
import org.apache.ibatis.annotations.Mapper;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @author chenlan
* * @MapperScan 注解扫描mapper
* * basePackages 属性值为扫描的包
* * annotationClass 属性值为指定类型的注解 默认扫描 @Mapper 可以设置为 @Repository
*/
@SpringBootApplication
@MapperScan(basePackages = "com.cl.mapper")
public class SpringbootDemo02Application {
public static void main(String[] args) {
SpringApplication.run(SpringbootDemo02Application.class, args);
}
}
1.6.4 编写测试类
@Test
public void testSelect(){
List<com.cl.pojo.User> userList = userMapper.selectUser();
for (com.cl.pojo.User user: userList) {
System.out.println(user);
}
}
@Test
public void testInsert(){
com.cl.pojo.User user = new com.cl.pojo.User();
user.setName("cl");
user.setAge(12);
int row = userMapper.insertUser(user);
System.out.println(user);
}
1.7 SpringBoot 整合 PageHelper 插件
1.7.1 添加依赖
<!--添加 pagehelper 分页插件依赖-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.13</version>
</dependency>
1.7.2 测试
@Test
public void testPage(){
PageHelper.startPage(1,2);
PageInfo<com.cl.pojo.User> pageInfo = new PageInfo<>(userMapper.selectUser());
System.out.println(pageInfo);
System.out.println(pageInfo.getTotal());
System.out.println(pageInfo.getPages());
for (com.cl.pojo.User u : pageInfo.getList()) {
System.out.println("u = " + u);
}
}
1.8 SpringBoot 创建 web 项目
springboot 创建项目时有两种默认打包方式选择
-jar
-war
springboot 默认不支持使用 -jar 打包含有 jsp 页面的 web 项目,所以包含 jsp 页面的项目需要用 -war打包
1.8.1 创建以 - war 打包方式的 springboot 项目
1.8.2 导入依赖
<!-- springboot jsp 页面解析器-->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
<!--servlet-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<!--作用范围 provided 编译时测试时需要 运行时 打包时不需要-->
<!--
jsp 页面相关依赖: jsp servlet jasper 等需要设置作用范围为 provided
不设置时默认作用范围为 compile 由于tomcat 中配置了相关依赖 会冲突
-->
<scope>provided</scope>
</dependency>
1.8.3 编写 jsp 页面
需要添加 web 根目录 webapp
添加路径:src\main\webapp
1.8.4 在入口类添加对 servlet 的支持
package com.cl;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
/**
* @author chenlan
* 程序入口类
* web 项目要在程序入口类 添加对 servlet 的支持
* 继承 SpringBootServletInitializer 重写 configure 方法
*/
@SpringBootApplication
public class SpringbootDemo03Application extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(SpringbootDemo03Application.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(SpringbootDemo03Application.class);
}
}
1.8.5 添加视图解析器配置
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
1.8.6 使用 install 安装命令打包
1.8.7 运行 war 包
java -jar springboot_demo03-0.0.1-SNAPSHOT.war
1.8.8 访问 web 项目
运行日志可以查看项目端口和上下文路径
Tomcat started on port(s): 8080 (http) with context path ''
WEB-INF路径下的页面是不能通过 url 直接访问的 需要编写 controller
1.9 SpringBoot 整合 junit 测试
1.9.1 添加 xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
1.9.2 新建测试类
使用 Spring Initializr 方式搭建的 Spring Boot 项目,会在 src.test.java 试目录下自动创建与项目主程序启动类对应的单元测试类
package com.cl;
import com.cl.controller.HelloController;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
/**
* @RunWith(SpringRunner.class) 测试启动器 加载 springboot 测试注解
* @SpringBootTest 标记此类为 springboot 测试类 ,并加载项目的上下文环境
*/
@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringbootDemo01ApplicationTests {
@Autowired
private HelloController helloController;
@Test
public void contextLoads() {
System.out.println(helloController.hello());
}
}
应的单元测试类
```java
package com.cl;
import com.cl.controller.HelloController;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
/**
* @RunWith(SpringRunner.class) 测试启动器 加载 springboot 测试注解
* @SpringBootTest 标记此类为 springboot 测试类 ,并加载项目的上下文环境
*/
@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringbootDemo01ApplicationTests {
@Autowired
private HelloController helloController;
@Test
public void contextLoads() {
System.out.println(helloController.hello());
}
}