SpringBoot

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。
springboot项目
1.pom文件
springboot项目最核心的是其maven工程中的pom文件的编写,我们有多种方式可以在maven中构建一个springboot项目。
springboot项目中的pom文件,按照官方要求,一般需要在基本的pom配置中添加额外几个地方:

  1. 继承Springboot提供的一个父项目。
    在这里插入图片描述
    springboot官方推荐我们使用spring-boot-starter-parent,在spring-boot-starter-parent中包含了以下
    信息:
    Java版本
    项目编码
    测试框架
    资源过滤
    插件配置
    。。。
    也可以自己在pom中覆盖这些默认值:
    在这里插入图片描述
  2. 根据需求添加对应启动器starter的依赖。
    在这里插入图片描述
    springboot的启动器 starter主要用来简化依赖用的,例如原来在maven项目中需要使用web相关的功能和框架,那么就要引入对应的一些web相关的依赖,并且需要自己去找这些依赖的坐标和版本,但是springboot中只需要引入一个starter就行了:spring-boot-starter-web。当然,如果更换starter中默认的依赖,也是可以的。例如,spring-boot-starter-web中默认使用的是内嵌的tomcat服务器,可以替换为jetty服务器,具体如下: 先排除不用的默认依赖,在手动添加自己需要的依赖。
    在这里插入图片描述
  3. 配置springboot的maven插件。
    在这里插入图片描述
    springboot的Maven插件(Spring Boot Maven plugin)能够以Maven的方式为应用提供springboot的支持,即为Spring Boot应用提供了执行Maven操作的可能。该插件能够将Spring Boot应用打包为可执行的jar或war文件,然后以普通的jar包方式运行springboot应用。

2.程序入口
springboot项目中需要一个程序入口,就是一个类中含有main方法,但是需要在这个类上使用springboot的专用注解@SpringBootApplication
在这里插入图片描述
该注解可以让当前类成为一个配置类,自动扫描用户的包,以及最重要的一个功能:开启springboot的自动配置功能:

3.测试代码
springboot项目中的测试类,默认使用了spring-test模块以及结合了junit测试框架。

这个测试类和springboot项目的入口类的位置的关系,运行测试类的时候,会自动先运行入口类,
因为要先读取配置、扫描包、开启自动配置功能等。入口类也是一个配置类。
一般会在同包以及子包下自动查找要使用的类。当前例子中,测试类和入口的类的位置就是在同一个包下面。
如果测试类和入口类(配置类)的位置比较复杂或者混合,也可以自己去明确指定,
在这里插入图片描述
配置文件
在springboot项目中,默认只有一个配置文件,在大多数情况下这个一个配置文件也就足够了。
springboot的配置文件,默认支持俩种方式:

  1. properties文件
    application.properties :
    在这里插入图片描述
  2. yml文件
    application.yml :
    俩种文件的配置内容一致,但是配置的格式不同。俩个文件同时存在,优先使用properties文件中
    的配置。
    在这里插入图片描述
    pom文件中添加web启动器的依赖:
    在这里插入图片描述
    运行springboot的程序入口类DemoApplication。

自动配置:
javaconfig
spring中Bean的配置方式 :

  1. Xml配置方式
    2 .Annotation配置方式
  2. JavaConfig配置方式
    类要配置到spring容器中时,如果是xml方式的话,就是在xml中配置bean标签即可,如果是annotation方式的话,在类上面加入@Component注解即可,如果是JavaConfig方式的话,编写一个java的配置类即可。
    JavaConfig类:
    在这里插入图片描述
    该配置类放到springboot入口类的包下或者其子包下,会被自动扫描读取到,其本质上和xml配置以及annotation配置的原理是一样的,只是变了另一种形式。
    2.autoconfig
    springboot中的自动配置 :
    当前我们在springboot项目中引入一个框架的时候,例如springmvc框架,我们不几乎不需要做任何配置,就可以使用到springmvc中的功能并且成功运行,这就是因为引入springmvc框架后,springboot就已经自动帮我们把这个框架都默认配置好了。
    如何实现的自动配置:
    整体思路是这样的,常用框架对应的JavaConfig类都已经编写好了,springboot启动的时候会一个一个的进行读取,但是读取的时候会先根据条件进行判断,看是否需要真的读取该配置类去配置对应的框架。
    所以,关键的一点在于,每个配置类中,都可以添加条件注解,来判断是否满足某一个条件,从而决定是否读取该配置类。

具体流程如下 :
程序入口类上使用 @SpringBootApplication 注解
在这里插入图片描述
@SpringBootApplication 注解又包含了 @EnableAutoConfiguration 注解
在这里插入图片描述
@EnableAutoConfiguration 注解又导入(@Import)了 AutoConfigurationImportSelector

在这里插入图片描述
AutoConfigurationImportSelector 中,定义了一个方法 getCandidateConfigurations
在这里插入图片描述
getCandidateConfigurations方法可以扫描spring.factories文件中的配置
在这里插入图片描述
spring.factories文件在
spring-boot-autoconfigure-2.3.0.RELEASE.jar的META-INF中
在这里插入图片描述
spring.factories文件中声明了很多java配置类,但是每个配置类都是需要满足一定的条件才会执行
(例如: @ConditionalOnClass 、 @ConditionalOnProperty 、
@ConditionalOnMissingBean 等
在这里插入图片描述
web
1.springmvc
在springboot中使用springmvc非常简单,只需要引入一个starter即可:
在这里插入图片描述
在不考虑视图层的数据展现问题的情况下,后端可以创建出RSETFul风格的接口,供前端进行调用访问。
REST(Representational State Transfer),是2000年Roy Fielding博士在他的博士论文中所提出的一种软件架构模式。
REST就是一种设计API的模式。最常用的数据格式是JSON。由于JSON能直接被JavaScript读取,所以,
以JSON格式编写的REST风格的API具有简单、易读、易用的特点。
Rest架构的主要原则

  1. 系统中所有事物都被抽象为资源
  2. 每个资源有唯一的资源标识符
  3. 同一个资源具有多种表现形式(xml,json等)
  4. 对资源的各种操作不会改变资源标识符
  5. 所有的操作都是无状态的
  6. 符合REST原则的架构方式即可称为RESTful

如果要修改项目的端口后和项目的根路径,可以在application.properties进行配置,把其默认值给覆盖
了:
在这里插入图片描述
mybatis
springboot中使用mybatis框架,主要是要引入其对应的starter: mybatis-spring-boot-starter,通过名字可用看出(springboot提供的starter都是spring-boot-starter-xxx),这个starter其实是mybatis自己进行的实现,并提供了结合在springboot中的解决方案。
使用了该Starter之后,只需要定义一个DataSource即可,它会自动创建使用该DataSource的SqlSessionFactoryBean以及SqlSessionTemplate。会自动扫描你的Mappers,并关联到SqlSessionTemplate,然后注册到Spring上下文中,最终就可以使用@Autowired注解把映射接口的实现类注入到指定地方了。
1.xml
pom.xml ,主要是引入了mybatis-spring-boot-starter
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
springboot启动类: Application添加的关键的注解: @MapperScan
在这里插入图片描述
注意1,springboot程序入口中使用了@MapperScan({“com.briup.mapper”})注解
该注解会扫描指定包下的mybatis映射接口,并且为其自动生成实现对象。
注意2,application.properties中已经配置了读取mybatis的配置文件和映射文件的路径,同时也配置mybatis下的别名。
注意3,也可以不使用@MapperScan,但是需要在每一个映射接口上添加注解@Mapperspringboot也会自动扫描到并识别的。
2.annotation
mybaits中使用annotation来映射sql语句,例如:springboot-mybatis-annotation项目。
在这里插入图片描述
springdata-jpa
1.简介
Spring Data 项目的目的是为了简化构建基于 Spring 框架应用的数据访问,包括关系型数据库库、非关系型数据库、Map-Reduce 框架、云数据服务等。Spring Data JPA是Spring Data下面的一个子项目,其提供了对JPA的操作支持。
JPA(Java Persistence API)是当年的Sun官方提出的Java持久化规范。它为Java开发人员提供了一种对象/关联映射工具来管理Java应用中的关系数据。
它的出现主要是为了简化现有的持久化开发工作和整合ORM技术,结束现在Hibernate,TopLink,JDO等
ORM框架各自为营的局面。值得注意的是,JPA是在现有Hibernate,TopLink,JDO等ORM框架的基础上发展而来的。JPA在JAVA EE 5的时候也加入了其规范之中。
Spring Data JPA 是 Spring 基于 ORM 框架、JPA 规范的基础上封装的一套JPA应用框架,可使开发者用极简的代码即可实现对数据的访问和操作。它提供了包括增删改查等在内的常用功能,使用 Spring DataJPA 可以极大提高开发效率!
Spring Data JPA让我们解脱了DAO层的操作,基本上所有CRUD都可以依赖于它来实现。
2.使用
springboot中使用Spring Data JPA,需要引入其对应的starter,maven会自动引入JPA及其相应的实现,
它默认采用的是hibernate的实现,通过几步简单的操作,就可以使用spring-data-jpa框架了
在这里插入图片描述
在这里插入图片描述
Spring Data JPA中采用泛型接口的形式,预先定义好了一些基本的CURD的方法。泛型中需要提供操作的实体类型以及对应的主键类型。
在使用的时候,只需要自定义dao层接口,然后继承JpaRepository接口,并指定接口中泛型的类型。
dao层接口 UserDao
在这里插入图片描述
实体类 User
@Entity 表示当前类是JPA中的一个实体类
@Table(name=“t_user”) 表示当前实体类对应数据库中的表为 t_user
@Id 表示当前属性对应t_user表中的主键列
@GeneratedValue 表示该属性对应的t_user表中列值是自动增长的
@Column(nullable=false,unique=true) 表示当前属性对应t_user表中的列值是非空唯一的
@Enumerated(EnumType.STRING) 表示当前属性对应枚举类型的String形式,而不是原始编号
3.查询
Spring Data JPA中提供了强大的查询功能,我们只需要在dao层接口中按规则,定出对应的查询方法,那么Spring Data JPA会根据我们所定义的 方法名 ,自动生成对应的sql语句,例如:
在这里插入图片描述
4.排序
Spring Data JPA中可以使用 Sort 对查询的结果进行排序,让 Sort 作为查询方法的参数即可。
父接口中已经有定好的方法的参数含有 Sort ,例如 JpaRepository 中的 List findAll(Sortsort);
也可以自己在接口中自定义方法的参数中添加 Sort 参数:
在这里插入图片描述
在这里插入图片描述
5.分页
Spring Data JPA中分页功能和排序的使用方式类似,只需要在查询方法的参数列表中添加一个Pageable 类型的参数即可。
父接口中已经有定好的方法的参数含有 Pageable ,例如 PagingAndSortingRepository 中的Page findAll(Pageable pageable);
也可以自己在接口中自定义方法的参数中添加 Pageable 参数:
在这里插入图片描述
方法的返回类型是可以是Page类型的,也可以是List集合类型的,只是Page类型的返回值可以提供更多的分页相关信息的获取。
6.注解
Spring Data JPA中可以在接口中自定义方法上面使用 @Query 注解,在该注解中可以使用JPQL或SQL来指定此方法被调用的时候需要执行的sql语言是什么。
在这里插入图片描述
@Query 注解还可以支持更新和删除的语句,但是需要结合 @Modifying 注解,以及事务管理的注解@Transactional
在这里插入图片描述
7.关联
Spring Data JPA中除了单表操作外,还可以支持多表级联操作,但是这需要表和表之间有关联关系,同时还需要在实体类中把这种关联关系给配置映射出来(Object-Relationl Mapping)。
1对1关系:
假设一个学生对应一个地址,一个地址也对应一个学生,那么学生和地址之间就是1 对1关系。
在这里插入图片描述
级联查询
在这里插入图片描述
1对N关系:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
N对N关系:
在这里插入图片描述
在这里插入图片描述
级联查询:
在这里插入图片描述
8.自定义
在实际的业务功能中,可能有一些查询的返回结果和当前任何一个实体类都不对应,例如一个查询是从
几张不同的表中分别挑选出来了几个字段来作为结果,那么这个查询结果就和当前任何一个实体类都不
对应。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值