一、背景介绍
1.概述
做Java开发的人一提起Spring,首先在脑海中浮现出的就是“IoC”,“AOP”,“Spring MVC”,“Spring Security”等等这些名词,甚至大有“无Spring不Java”的感慨。
实际上,时至今日Spring已不再是一个简单的编程框架了,从最初的“SSH框架”发展到今天,Struts和Hibernate都几乎快要从程序员视野中消失了,而Spring却发展成了一个非常庞大且完整的生态。
所以说,除非特别指明是Spring生态中的某个具体框架,否则提起“Spring”应该指的是整个Spring生态。
说句不夸张的话,Java程序员只要精通了Spring,也就掌握了Java开发的精髓。
在整个Spring生态中包含了许多应用在特定场景的具体框架,如:“Spring Framework”,“Spring Security”,“Spring Boot”,“Spring Cloud”等等,其中“Spring Framework”框架是整个生态的核心基础,其他框架都需要依赖“Spring Framework”提供的基础功能,而且每个框架都有自己独立的代码仓库。
2. Spring 框架介绍
Spring是一个开源的Java应用程序框架,由Rod Johnson创建并首次发布于2003年。它提供了一种全面的编程和配置模型,旨在简化企业级应用程序的开发。
Spring框架的核心特性是依赖注入(Dependency Injection)和面向切面编程(Aspect-Oriented Programming)。依赖注入通过解耦组件之间的依赖关系,使得代码更加可测试、可维护,并且降低了组件之间的耦合度。面向切面编程允许开发者将与业务逻辑无关的横切关注点(如事务管理、安全性等)从核心业务逻辑中分离出来,以提高代码的可重用性和可维护性。
Spring框架还提供了许多其他功能和模块,如数据访问、Web开发、消息传递、任务调度等。它支持各种应用程序类型,包括传统的单体应用、分布式系统、微服务架构等。
随着时间的推移,Spring框架的生态系统不断壮大,涌现出许多与Spring集成的项目和解决方案。例如,Spring Boot是Spring生态系统中的一个子项目,旨在简化Spring应用程序的开发和部署。Spring Cloud则提供了一套用于构建分布式系统的工具和组件。此外,Spring框架还与其他流行的开源技术(如Hibernate、MyBatis、Thymeleaf等)集成,以提供更全面的解决方案。
总之,Spring框架通过提供强大而灵活的特性,帮助开发者构建高效、可扩展且易于维护的Java应用程序。它在Java开发社区中具有广泛的影响力,并被许多企业和开发团队广泛采用。
二、 Spring Boot框架
1. Spring Boot框架介绍
Spring Boot是一款用于简化Java应用程序开发的开源框架,它是由Pivotal软件公司(现为VMware)的工程师们开发的。Spring Boot的目标是简化传统Spring框架的配置和部署过程,提供一个更快速、更易于使用的开发环境。
Spring Boot的发展可以追溯到2013年。当时,Spring框架已经成为Java开发领域最受欢迎的框架之一,但在配置和部署方面存在一些繁琐的问题。为了解决这些问题,Spring团队决定开发一个新的框架,即Spring Boot。
Spring Boot的设计初衷是让开发者能够以最小的配置快速搭建一个可运行的Java应用程序。它通过自动配置和约定大于配置的原则,减少了开发者在项目配置方面的工作量,并提供了丰富的特性和开箱即用的功能,如自动化的依赖管理、内嵌服务器、健康检查、监控等。同时,Spring Boot也保留了Spring框架的优势,如依赖注入、AOP等。
随着时间的推移,Spring Boot逐渐获得了广泛的认可和应用。它的简洁性和高效性使得开发者能够更专注于业务逻辑的实现,而无需过多关注配置和部署的细节。Spring Boot也积极采纳了开发者的反馈和贡献,不断更新和改进自身的功能。
截至当前,Spring Boot已经成为Java应用程序开发中最流行的框架之一。许多企业和开发团队都在使用它来开发各种类型的应用,包括Web应用、批处理应用、微服务等。同时,Spring Boot也与其他技术生态系统(如Spring Cloud、Spring Data等)密切结合,为开发者提供了全面的解决方案。
2.Spring Boot的缺点
-
学习曲线:尽管Spring Boot简化了配置和开发过程,但仍然需要掌握Spring框架的基础知识。对于初学者来说,仍需要一定的学习曲线和理解Spring框架的概念和原则。
-
复杂性:尽管Spring Boot简化了很多配置,但对于复杂的应用场景,仍然需要深入了解底层的Spring框架和原理。在某些情况下,需要手动进行配置或调整。
-
内置容器限制:Spring Boot内嵌的Web服务器默认适合开发和测试环境使用,对于高并发或特殊需求的生产环境可能不够灵活。在这种情况下,可能需要考虑使用自定义的容器进行部署。
3. 为什么要学习Spring Boot
三、Spring boot核心配置
1.启动器:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
pom.xml:项目依赖文件
配置文件application.properties
#设置端口号
server.port=8082
#设置访问应用的上下文路径,contextpath
server.servlet.context-path=/myboot
yml不是以键=值的方式,而是 键:值,并且还有层级关系。
推荐使用yml的方式来写,删除application.properties
配置文件的优先级:application.properties>application.yml>appllication.yaml
2.Spring boot基本的包
1.Entity层
entity层又被称为实体类层,实体类通常包含私有成员变量和公共访问方法(getter 和 setter)可以用@Data注解轻松实现,用于存储和访问数据。在实体类中,成员变量通常与表中的列相对应,而访问方法则用于操作这些数据。
2.Service层
Service层通常是用来处理业务逻辑的部分,它还负责调用dao层,实现对数据的处理和业务逻辑的实现,然后返回给controller层。
3.Controller层
Controller层又称为控制类,处理HTTP请求。
4.Dao(Mapper)层
Dao又称为数据访问层,主要作用是实现对数据库的增删改查操作。
5.连接数据库
引入依赖:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
<!-- 导入Mybatis-Plus依赖 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.0</version>
</dependency>
<!-- 导入lombok依赖 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
.yml连接数据库:
spring:
datasource:
url: jdbc:mysql://localhost:3306/db02?ServerTimezone=UTC
username: root
password: ***
driver-class-name: com.mysql.cj.jdbc.Driver
spring:
# mysql配置信息
datasource:
# 数据库地址 端口 数据库名
url: jdbc:mysql://127.0.0.1:3306/springboot_demo?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=GMT%2B8
username: root # 账号
password: root # 密码
driver-class-name: com.mysql.cj.jdbc.Driver
mybatis-plus:
mapper-locations: mapper/*.xml #这个配置是用来连接mapper接口和mapper配置类的
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #运行日志
map-underscore-to-camel-case: true #驼峰转换
type-aliases-package: com.example.springbootdemo.model #实体类扫描包
四、mybatis、mybatis-plus、Jpa的原理和简单使用
1. mybatis依赖
mybatis:是一个优秀的持久层的框架, 通过Dao层将业务逻辑和数据访问逻辑分离,是系统的设计更清晰,系统更容易维护和进行单元测试。它对JDBC操作数据库的过程进行封装,使得开发者只需要关注SQL语句本身,不需要再花费精力去处理其他的东西,如:注册驱动、创connection、创建statement、手动设置参数、结果集检索等JDBC繁杂的过程代码。mybatis通过XML配置文件或注解的方式配置要执行的各种Statement或preparedStatement,并通过Java对象和Statement中的SQL语句进行映射,最终生成执行的SQl语句,最后由mybatis执行SQL语句并将结果映射成Java对象返回。
mybatis依赖:
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
而mybatis-plus是一个增强工具,它在mybatis的基础上只做增强不做改变,是为简化开发、提高效率而生。
使用spring-boot整合mybatis时,要注意mybatis的映射文件的位置,而mybatis-plus不同,它里面包含了常见的数据库核心操作,一般不需要配置映射文件。
mybatis-plus依赖:
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.1</version>
</dependency>
2.JPA
JPA:是一种规范或标准,用来操作实体对象,执行CRUD操作,使得框架在后台替代用户完成所有事情,Spring Data JPA是Spring提供的一套简化JPA开发的框架,提供了许多功能,如:分页、排序以及复杂查询等···
JPA为我们提供以下功能: ORM元数据:JPA支持XML和注解两种元数据形式,元数据用来描述对象和关系表之间的映射关系,框架据此将实体对象持久化到数据库中,如@Entity、@Table、@Transient等注解。
JPA的API:用来操作实体对象,执行CRUD操作,使框架在后台替我们完成所有的事情,是开发者从烦琐的JDBC和SQL代码中解脱出来
JPQL:通过面向对象而非面向数据库的查询语言来查询数据,避免程序的SQL语句过于读。
JPA依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
JPA配置:
#jpa配置
jpa:
show-sql: false
hibernate:
ddl-auto: create
properties:
hibernate:
dialect: org.hibernate.dialect.MySQL5Dialect
五、前端模板引擎Thymeleaf的整合和使用
Thymeleaf:是一款支持HTML、XML、TEXT、Javascript、CSS、raw等的模板引擎,它可以完全取代JSP,与其他模板引擎相比,Thymeleaf是开箱即用的,不需要启动整个Web项目,其模板语法并不会破坏文档的结构,使用方便。
1.Thymelea依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
<version>2.1.6.RELEASE</version>
</dependency>
2.Thymelea模板:
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link href="https://cdn.staticfile.org/twitter-bootstrap/5.1.1/css/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.staticfile.org/twitter-bootstrap/5.1.1/js/bootstrap.bundle.min.js"></script>
</head>
<body>
</body>
</html>
六、常用注解
1.基础注解:
@Service: 注解在类上,表示这是一个业务层bean
@Controller:注解在类上,表示这是一个控制层bean
@Repository: 注解在类上,表示这是一个数据访问层bean
@Component: 注解在类上,表示通用bean ,value不写默认就是类名首字母小写
@Autowired:按类型注入.默认属性required= true
@Resource: 按名称装配。
2.启动注解:
@SpringBootApplication:包含了@ComponentScan@Configuration@EnableAutoConfiguratio注解。
@ComponentScan:让spring Boot扫描到Configuration类并把它加入到程序上下文。
@SpringBootConfiguration :等同于spring的XML配置文件;使用Java代码可以检查类型安全。
@EnableAutoConfiguration :自动配置。