SpringBoot框架技术总结(二)(1)

需要注意的是,如果是使用 Spring Initializr 方式搭建的 Spring Boot 项目,会自动加入 spring-boot-starter-test 测试依赖启动器,无需开发者再次手动添加。

  1. 编写测试类

@SpringBootTest // 标记该类是一个 Spring Boot d

public class ApplicationTest {

@Test

public void testJunit(){

System.out.println(1);

}

}

在这里插入图片描述

注意:测试类所在的包需要和启动类是在同一个包下。

如果不在同一个包下,那么就要使用如下写法指定启动类

//classes属性来指定启动类

@SpringBootTest(classes = HelloApplication.class)

public class ApplicationTest {

@Test

public void testJunit(){

System.out.println(1);

}

}

2.2、兼容老版本

如果是对 SpringBoot 2.2.0 之前的项目进行版本升级就会发现之前的单元测试代码出现一些问题,这是因为 2.2.0 之前使用的是 junit4 ,而 2.2.0 之后使用的是 junit5 。

我们来看一下 SpringBoot 2.2.0 之前单元测试的写法

@SpringBootTest

@RunWith(SpringRunner.class)

public class ApplicationTest {

@Test

public void testJunit(){

System.out.println(1);

}

}

junit4 版本,需要搭配 @RunWith 注解来使用。

所以如果我们在依赖中对 SpringBoot 升级,就会出现单元测试代码爆红的问题。如何解决这个问题呢?我们先来看一张图

在这里插入图片描述

从上图可以看出 JUnit 5 = JUnit Platform + JUnit Jupiter + JUnit Vintage

  • JUnit Platform: 这是Junit提供的平台功能模块,通过它,其它的测试引擎也可以接入

  • JUnit JUpiter:这是JUnit5的核心,是一个基于JUnit Platform的引擎实现,它包含许多丰富的新特性来使得自动化测试更加方便和强大。

  • JUnit Vintage:这个模块是兼容JUnit3、JUnit4版本的测试引擎,使得旧版本的自动化测试也可以在JUnit5下正常运行。

虽然 Junit5 包含了 JUnit Vintage 来兼容 JUnit3 和 Junit4 ,但是 SpringBoot 2.4 以上版本对应的 springboot-starter-test 移除了默认对 Vintage 的依赖。所以当我们仅仅依赖 spring-boot-starter-test 时会发现之前我们使用的 @Test 注解和@RunWith 注解都不能使用了。

解决办法就是我们单独依赖 vintage 来进行兼容

org.junit.vintage

junit-vintage-engine

test

3、整合mybatis


sql 语句

DROP TABLE IF EXISTS user;

CREATE TABLE user (

id INT(11) NOT NULL AUTO_INCREMENT,

username VARCHAR(50) DEFAULT NULL,

age INT(11) DEFAULT NULL,

address VARCHAR(50) DEFAULT NULL,

PRIMARY KEY (id)

) ENGINE=INNODB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;

/*Data for the table user */

INSERT INTO user(id,username,age,address) VALUES (2,‘pdd’,25,‘上海’),

(3,‘UZI’,19,‘上海11’),(4,‘RF’,19,NULL),(6,‘三更’,14,‘请问2’),(8,‘test1’,11,‘cc’),

(9,‘test2’,12,‘cc2’);

实体类

@Data

@AllArgsConstructor

@NoArgsConstructor

public class User {

private Integer id;

private String username;

private Integer age;

private String address;

}

3.1、整合步骤

  1. 添加依赖

org.mybatis.spring.boot

mybatis-spring-boot-starter

2.2.0

mysql

mysql-connector-java

runtime

这里的 mybatis 启动器的版本 springboot 并没有指定,我们需要自己设置版本号,如何查看自己应该引入什么版本呢?

github: https://github.com/mybatis/spring-boot-starter/

在这里插入图片描述

  1. 配置数据库信息

spring:

datasource:

url: jdbc:mysql://localhost:3306/springboot?characterEncoding=utf-8&serverTimezone=UTC

username: root

password: 123456

driver-class-name: com.mysql.cj.jdbc.Driver

properties 写法如下:

#加载驱动

spring.datasource.driver-class-name=com.mysql.jdbc.Driver

#数据库连接路径

spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai

#数据库用户名

spring.datasource.username=root

#数据库密码

spring.datasource.password=123456

数据源类型选择配置,如果需要使用其他数据源,还需要进行额外配置,这里选择阿里巴巴的 Druid 数据源,需要在 pom.xml 配置文件中添加 Druid 数据源的依赖启动器,代码如下所示:

com.alibaba

druid-spring-boot-starter

1.2.1

上述引入的依赖 druid-spring-boot-starter,同样是阿里巴巴为了迎合 Spring boot 项目而适配的 Druid 数据源启动器,当在 pom.xml 文件中引入该启动器后,不需要进行其他额外配置,Spring boot 项目会自动识别配置 Druid 数据源。

需要注意的是,上述配置的 Druid 数据源启动器内部已经初始化了一些运行参数(例如:initialSize,maxActive等),如果开发过程中需要修改第三方 Druid 的运行参数,则必须在全局配置文件中继修改,代码如下所示:

#添加并配置第三方数据源

#1.设置数据源类型

spring.databsource.type = com.alibaba.druid.pool.DruidDataSource

#2.设置初始化连接数

spring.databsource.druid.initial-size = 20

#3.设置最小空闲数量

spring.databsource.druid.max-active = 100

#4.设置最大连接量

spring.databsource.druid.max-active = 100

  1. 配置 mybatis 相关配置

在项目中编写的 XML 映射文件,Spring Boot并无从知晓,所以无法扫描到该自定义编写的 XML 映射文件,需要在全局配置文件 application.yml / application.properties 中添加 Mybatis映射文件的路径,同时也可以添加实体类的别名设置。

  • 这是yaml写法

mybatis:

mapper-locations: classpath:mapper/*Mapper.xml # mapper映射文件路径

type-aliases-package: com.sangeng.domain # 配置哪个包下的类有默认的别名

  • 这是 properties 写法

#mybatis取别名

mybatis.type-aliases-package=com.sangeng.domain

#扫描映射文件

mybatis.mapper-locations=classpath*:mapper/*Mapper.xml

在这里插入图片描述

  1. 编写 Mapper 接口

注意在接口上加上 @Mapper@Repository 注解

@Repository

@Mapper

public interface UserMapper {

public List findAll();

}

  1. 编写mapper接口对应的xml文件(也可以使用插件一键生成)
<?xml version="1.0" encoding="UTF-8" ?>

select * from user

在这里插入图片描述

  1. 测试

@SpringBootTest(classes = HelloApplication.class)

public class SpringMyTest {

@Autowired

UserMapper userMapper;

@Test

public void tesMapper(){

System.out.println(userMapper.findAll());

}

}

3.2、加载Mapper接口方式

SpringBoot 整合 MyBatis 加载 Mapper 接口的方式有两种,一是在对应的接口类上添加 @Mapper 注解,二是在 Spring Boot 启动器类上添加 @MapperScan("xxx") 注解(推荐使用此方式)

3.2.1、@Mapper注解

在对应的接口类上添加 @Mapper 注解,如果编写的 Mapper 接口过多时,需要重复为每一个 Mapper 接口文件添加 @Mapper 注解,代码如下所示:

  1. UserMapper接口

@Mapper

public interface UserMapper{

// 省略接口方法

}

  1. RoleMapper接口

@Mapper

public interface RoleMapper{

// 省略接口方法

}

3.2.3、@MapperScan注解

为了避免 @Mapper 注解重复添加的麻烦,可以直接在 Spring Boot 启动器类上 添加@MapperScan("xxx") 注解。不需要再为每一个 Mapper 接口添加 @Mapper 注解。

  • @MapperScan("xxx") 注解的作用和 @Mapper 注解类似,但是它必须制定需要扫描的具体包名,例如 @MapperScan(“com.xxx.dao”)

  • 扫描多个包时可以使用英文逗号分隔,例如: @MapperScan(“com.xxx.mapper”)

@SpringBootApplication

// 扫描mapper接口所在的包

@MapperScan(basePackages = “com.kuang.dao”)

public class SpringbootBdqnApplication {

public static void main(String[] args) {

SpringApplication.run(SpringbootBdqnApplication.class, args);

}

}

4、web开发


4.1、静态资源访问

由于SpringBoot的项目是打成jar包的所以没有之前web项目的那些web资源目录(webapps)。那么我们的静态资源要放到哪里呢?

从SpringBoot官方文档中我们可以知道,我们可以把静态资源放到 resources/static (或者resources/public 或者resources/resources 或者 resources/META-INF/resources ) 中即可。

在这里插入图片描述

static目录

  • 该目录存放静态资源,可放置 css、js、图片、html 等静态资源

  • 该目录可以直接访问

templates目录

  • 该目录下存放网页模板,如 thymeleaf 等模板

  • 该目录是安全的,外界不可直接访问,类似web项目中的WEB-INF文件夹

静态资源放完后

  • 例如我们想访问文件:resources/static/index.html 只需要在访问时资源路径写成/index.html即可。

  • 例如我们想访问文件:resources/static/pages/login.html 访问的资源路径写成: /pages/login.html

在这里插入图片描述

4.1.1、修改静态资源访问路径

SpringBoot默认的静态资源路径匹配为 /** 。如果想要修改可以通过 spring.mvc.static-pathpattern 这个配置进行修改。

例如想让访问静态资源的url必须前缀有/res。例如/res/index.html 才能访问到static目录中的。我们可以修改如下:

在application.yml中

spring:

mvc:

static-path-pattern: /res/** #修改静态资源访问路径

在这里插入图片描述

4.1.2、修改静态资源存放目录

我们可以修改 spring.web.resources.static-locations 这个配置来修改静态资源的存放目录。

例如:

spring:

web:

resources:

static-location:

  • classpath: /sgstatic/ # 这也作为我们的静态资源存放目录 resources/sgstatic

  • classpath: /static/ # 这是我们的静态资源存放目录 resources/static

这样我们就也可以直接访问 resources/sgstatic 目录下的静态资源了,也可以直接访问 resources/static 目录下的静态资源。

注意,static-location 是一个数组,我们可以写一个,也可以写多个静态资源存放目录

4.1.3、网站图标
  • 与其他静态资源一样,Spring Boot在配置的静态内容位置中查找 favicon.ico。

  • 如果存在这样的文件,它将自动用作应用程序的favicon。

  1. 关闭 SpringBoot 默认图标

#关闭默认图标

spring.mvc.favicon.enabled=false

  1. 自己放一个图标在静态资源目录 resources 下

  2. 清除浏览器缓存!刷新网页,发现图标已经变成自己的了!

4.2、模拟前后端分离式开发

我们开启两个 SpringBoot 工程,来模拟我们的前后端分离式开发

  • 一个是存放静态目录的 springboot_static,端口是80

  • 一个是我们的 springboot_web,端口是81

在这里插入图片描述

我们在 springboot_web 工程进行开发

  1. 首先导入依赖和继承 spring-boot-starter-parent 这个父工程

org.springframework.boot

spring-boot-starter-parent

2.5.4

org.springframework.boot

spring-boot-starter-web

mysql

mysql-connector-java

runtime

org.mybatis.spring.boot

mybatis-spring-boot-starter

2.2.0

org.projectlombok

lombok

  1. 我们写一个查询查询用户接口测试一下

数据库语句如下

DROP TABLE IF EXISTS user;

CREATE TABLE user (

id INT(11) NOT NULL AUTO_INCREMENT,

username VARCHAR(50) DEFAULT NULL,

age INT(11) DEFAULT NULL,

address VARCHAR(50) DEFAULT NULL,

PRIMARY KEY (id)

) ENGINE=INNODB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;

/*Data for the table user */

INSERT INTO user(id,username,age,address) VALUES (2,‘pdd’,25,‘上海’),

(3,‘UZI’,19,‘上海11’),(4,‘RF’,19,NULL),(6,‘三更’,14,‘请问2’),(8,‘test1’,11,‘cc’),

(9,‘test2’,12,‘cc2’);

​ application.yml 中配置如下

server:

port: 81

spring:

datasource:

url: jdbc:mysql://localhost:3306/springboot?characterEncoding=utf-8&serverTimezone=UTC

username: root

password: 123456

driver-class-name: com.mysql.cj.jdbc.Driver

mybatis:

mapper-locations: classpath:mapper/*Mapper.xml # mapper映射文件路径

type-aliases-package: com.sangeng.domain # 配置哪个包下的类有默认的别名

​ 实体类如下

@Data

@NoArgsConstructor

@AllArgsConstructor

public class User {

private Integer id;

private String username;

private Integer age;

private String address;

}

  1. 首先写 dao 层接口,并用插件生成对应的 Mapper.xml 文件

@Mapper

@Repository

public interface UserMapper {

List findAll();

}

<?xml version="1.0" encoding="UTF-8" ?>

select * from user

  1. 接着写 service 层接口和其实现类,并在实现类中注入 dao

@Service

public interface UserService {

List findAll();

}

public class UserServiceImpl implements UserService {

@Autowired

private UserMapper userMapper;

@Override

public List findAll() {

return userMapper.findAll();

}

}

  1. 最后编写 controller 层,并在 controller 层中注入 service

@RestController

@RequestMapping(“/user”)

public class UserController {

@Autowired

private UserService userService;

@RequestMapping(“/findAll”)

public List findAll(){

// 调用 service 查询数据,进行返回

return userService.findAll();

}

}

  1. 启动测试

在这里插入图片描述

在这里插入图片描述

我们查到的结果是 List 集合,List 集合会转换为 json 放入到响应体当中,但是我们如果是根据 id 查询,那么只会查出一个用户,是对象格式。我们要保证一个项目中所有接口返回的数据格式的统一。这样无论是前端还是移动端开发获取到我们的数据后都能更方便的进行统一处理。我们这里是将所有的数据格式统一为 json 格式。

所以我们定义一下结果封装类 ResponseResult,由于格式统一是公用的,所以我们可以在 com.sangeng 下创建一个公共 common 包,在包下创建结果封装类 ResponseResult

// 加上此注解,如果某个属性的值不为NULL,才会将其转化为Json格式

@JsonInclude(JsonInclude.Include.NON_NULL)

public class ResponseResult {

/**

  • 状态码

*/

private Integer code;

/**

  • 提示信息,如果有错误时,前端可以获取该字段进行提示

*/

private String msg;

/**

  • 查询到的结果数据(不同接口查询的类型不一样,所以我们可以设为泛型)

*/

private T data;

// 三个参数的有参构造(查询操作需要返回查询的数据data)

public ResponseResult(Integer code, String msg, T data) {

this.code = code;

this.msg = msg;

this.data = data;

}

// 两个参数的有参构造(状态码和提示信息)

public ResponseResult(Integer code, String msg) {

this.code = code;

this.msg = msg;

}

// 两个参数的有参构造(状态码和数据)

public ResponseResult(Integer code, T data) {

this.code = code;

this.data = data;

}

public Integer getCode() {

return code;

}

public void setCode(Integer code) {

this.code = code;

}

public String getMsg() {

return msg;

}

public void setMsg(String msg) {

this.msg = msg;

}

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

做任何事情都要用心,要非常关注细节。看起来不起眼的、繁琐的工作做透了会有意想不到的价值。
当然要想成为一个技术大牛也需要一定的思想格局,思想决定未来你要往哪个方向去走, 建议多看一些人生规划方面的书籍,多学习名人的思想格局,未来你的路会走的更远。

更多的技术点思维导图我已经做了一个整理,涵盖了当下互联网最流行99%的技术点,在这里我将这份导图分享出来,以及为金九银十准备的一整套面试体系,上到集合,下到分布式微服务

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
lic String getMsg() {

return msg;

}

public void setMsg(String msg) {

this.msg = msg;

}

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。[外链图片转存中…(img-14DbPloG-1713412799216)]

[外链图片转存中…(img-NqsbH7jK-1713412799217)]

[外链图片转存中…(img-lAkuJBBw-1713412799217)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

做任何事情都要用心,要非常关注细节。看起来不起眼的、繁琐的工作做透了会有意想不到的价值。
当然要想成为一个技术大牛也需要一定的思想格局,思想决定未来你要往哪个方向去走, 建议多看一些人生规划方面的书籍,多学习名人的思想格局,未来你的路会走的更远。

更多的技术点思维导图我已经做了一个整理,涵盖了当下互联网最流行99%的技术点,在这里我将这份导图分享出来,以及为金九银十准备的一整套面试体系,上到集合,下到分布式微服务

[外链图片转存中…(img-a6bfJnGW-1713412799217)]

[外链图片转存中…(img-XIF84Cmm-1713412799218)]

[外链图片转存中…(img-3HiCjf2l-1713412799218)]

[外链图片转存中…(img-VAhniwWN-1713412799218)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Spring Boot是一个用于创建独立、可执行的Spring应用程序的框架。它是基于Spring框架的,但是简化了配置和部署的复杂性。 相关外文文献研究了Spring Boot的设计原理和使用方法。其中一篇文章介绍了Spring Boot的起源和发展历程,详细说明了它是如何解决传统Spring应用程序中的复杂配置问题的。 另一篇论文研究了Spring Boot的特性和优势。它提到了Spring Boot的自动配置,即根据应用程序的依赖关系自动配置Spring框架的各种组件。同时也讨论了Spring Boot的开发效率高、部署简单的特点。 还有一篇文献研究了Spring Boot的性能和扩展性。它使用了一些性能测试工具对Spring Boot应用程序进行了测试,并比较了它与传统Spring应用程序的性能差异。研究结果显示,Spring Boot具有较好的性能和扩展性。 总结起来,相关外文文献对Spring Boot框架的设计原理、特性和性能进行了深入研究。这些研究为我们理解和使用Spring Boot提供了宝贵的参考。同时,这些研究也促进了Spring Boot框架的不断发展和改进。 ### 回答2: 外文文献关于Spring Boot框架的研究和实践非常丰富。以下是一些典型的外文文献: 1. Spring Boot: Up and Running (By Josh Long and Kenny Bastani): 这本书是Spring Boot的权威指南之一。它介绍了Spring Boot的核心概念和用法,并提供了大量的示例代码和实践建议。 2. Building Microservices with Spring Boot (By Josh Long and Kenny Bastani): 这本书通过使用Spring Boot构建微服务的案例来探讨如何使用这个框架来实现微服务架构。它涵盖了微服务架构的关键概念,以及如何使用Spring Boot实现各种微服务模式。 3. Mastering Spring Boot 2.0 (By Koushik Kothagal): 这本书深入讲解了Spring Boot 2.0的新特性和改进,并提供了详细的示例代码和解释。它包含了许多实际问题和解决方案,有助于开发人员更好地理解和应用Spring Boot框架。 4. Spring Boot in Action (By Craig Walls): 这本书全面介绍了Spring Boot的各个方面,包括配置、测试、数据访问、安全等。它的目标是通过实践案例帮助读者更好地理解和应用Spring Boot。 5. Pro Spring Boot 2 (By Felipe Gutierrez): 这本书重点介绍了Spring Boot 2的新特性和改进,并提供了深入的技术讨论和示例代码。它帮助读者掌握Spring Boot的高级用法,并针对不同领域的应用提供了实践建议。 这些外文文献提供了广泛的关于Spring Boot框架的知识和实践经验。通过阅读这些文献,开发人员可以更好地理解和应用Spring Boot,提高开发效率和质量。 ### 回答3: Spring Boot是一个用于构建独立且可快速启动的Java应用程序的开源框架。它通过提供默认配置和自动化配置来简化Spring应用程序的开发过程。下面是关于Spring Boot框架的外文文献的一些重点: 1. Tosi, D., Gallenmüller, S., & Dustdar, S. (2019). A Comparative Study of Spring Boot Deployment Options in the Cloud. In Proceedings of the 6th International Conference on Model-Driven Engineering and Software Development (MODELSWARD 2019) (pp. 79-89). Springer. 这篇论文研究了Spring Boot在云端环境中的部署选项,比较了不同的部署方式的性能和可伸缩性。研究结果可以帮助开发人员选择适合其应用程序需求的最佳部署方式。 2. Nainwal, P., & Trivedi, M. (2018). Secure Microservices Communication in Spring Boot with OAuth 2.0. In Proceedings of the International Conference on Wireless Communication, Vehicular Technology, Information Theory and Aerospace & Electronic Systems (pp. 1277-1283). IEEE. 这篇论文探讨了在Spring Boot中使用OAuth 2.0实现微服务之间的安全通信。作者介绍了基本的OAuth 2.0授权流程,并演示了如何在Spring Boot应用程序中实现微服务之间的身份验证和授权。 3. Singh, M., & Bhardwaj, S. (2020). Building Chat Application Using Spring Boot. International Journal of Computer Science and Information Security (IJCSIS), 18(2), 30-35. 这篇论文介绍了使用Spring Boot构建聊天应用程序的过程。作者详细说明了使用Spring Boot Websocket和Spring Security实现实时通信和身份验证的步骤,以及前端页面的实现。 这些研究文献提供了关于Spring Boot框架的不同方面的深入了解,并探讨了其在不同领域的应用。无论是在云部署、安全通信还是构建聊天应用程序方面,Spring Boot都提供了简化开发过程的解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值