SpringBoot简介

Boot:引导、启动。简化Spring应用的初始搭建以及开发过程

1基本

1.1新建项目

用spring initializr 很容易新建一个项目
spring boot简介 - 图1
旧项目也可以通过maven添加。注意版本2.0.8。过高的版本会导致一些配置和老版本不一致,建议统一版本,后续统一更新版本。
spring boot简介 - 图2

1.2目录结构

spring boot简介 - 图3
根目录:src.main.java
1.工程启动类(Application.java):置于com.e100soft.iot
2.实体类(beans):置于com.e100soft.iot.beans
3.数据访问层(Dao):置于com.e100soft.iot.dao(dao)
4.数据服务层(Service):置于com.e100soft.iot.service
5.前端控制器(Controller):置于com.e100soft.iot.controller
6.工具类(utils):置于com.e100soft.iot.utils
7.常量接口类(constant):置于com.e100soft.iot.constant
8.配置信息类(config):置于com.e100soft.iot.config
9.数据传输对象(DTO):置于com.e100soft.iot.dto(不要使用map)
资源文件:src.main.resources
1.页面以及js/css/image等置于static文件夹下的各自文件下
2.使用模版相关页面等置于templates文件夹下的各自文件下

编译后
Class文件和resource文件都会编译到classpath根目录
spring boot简介 - 图4
spring boot简介 - 图5
结构介绍:
https://www.cnblogs.com/flying-snake/p/12689801.html

1.3配置文件

Springboot遵循约定大于配置的原则,所以配置文件的很多配置项都没必要显式声明,但需要知道有哪些常用可配置项以及对应配置项的默认值。
spring boot简介 - 图6
使用druid,可以监控sql执行数据,url访问数据等等
spring boot简介 - 图7
Jpa配置使用数据库类型
spring boot简介 - 图8
Redis
spring boot简介 - 图9
上传文件大小
spring boot简介 - 图10

备注:
完整的配置以及默认值可以在官网找到:
https://docs.spring.io/spring-boot/docs/current/reference/html/appendix-application-properties.html#common-application-properties
自定义配置的方式:
https://www.jb51.net/article/151980.htm
配置文件的加载顺序为:
外部config目录 > 外部同级目录 > jar包内部config目录 > jar包内部同级目录
因此在部署时只需在jar包同级有配置文件,无需显式指定配置地址

1.4pom及打包

Springboot默认打包前会执行所有测试方法,可以设置跳过
spring boot简介 - 图11
Springboot默认不打包本地的jar包,可设置打包
spring boot简介 - 图12
maven常用的命令
spring boot简介 - 图13

2数据请求

2.1处理请求

Springboot处理http请求时,可以生命一个RestController,表示该类只返回数据,不解析视图。相当于@Controller+@ResponseBody
spring boot简介 - 图14

2.2接收参数

接收参数有三种方式
spring boot简介 - 图15
spring boot简介 - 图16

2.3日期映射

在url中映射到date
spring boot简介 - 图17
在json中映射到实体类
spring boot简介 - 图18

2.4上传、下载文件

上传
spring boot简介 - 图19
下载
spring boot简介 - 图20
spring boot简介 - 图21

3数据查询(jpa)

2.1表映射

@Entity 映射实体类到表,增加字段时,数据库也增加自动,删除字段时,数据库不删除字段。
spring boot简介 - 图22
实体类基类
spring boot简介 - 图23
一些常用注解

spring boot简介 - 图24
备注:jpa可以建立表关系,实现1对1,1对多,多对一,多对多关系
例如下图中该表通过@ManyToOne设置了多个外键字段,其中某些为懒加载,某些为关联查出
spring boot简介 - 图25
不建议表关系用hibernate生成,复杂性不可控,可以在实体类中约定某字段为外键。

2.2表查询

大部分简单的sql,只需建立实体类对应的dao层,继承JpaResponsity,然后使用(findBy + 属性名 + 查询方式 + (And|Or) + 属性名 + 查询方式…)即可实现简单查询。
spring boot简介 - 图26
对于稍微复杂sql,例如子查询,可以使用@Query构造jpql,例如:
以下例子还展示了构建Pageable实现分页查询
spring boot简介 - 图27
对于jpql不好实现的sql,例如关联查询,可以使用原生sql
注意原生sql无法使用实体类上的假删注解,需要加上where条件
spring boot简介 - 图28
对应动态条件的查询,可以使用标准查询(Specification)
spring boot简介 - 图29

备注:
Jpa文档
https://docs.spring.io/spring-data/jpa/docs/2.0.8.RELEASE/reference/html/#jpa.sample-app.finders.strategies
中文实例
https://www.jianshu.com/p/d6e87963d39e


4.常用注解

注解就像标签,是程序判断执行的依据。比如,程序读到@Test就知道这个方法是待测试方法,而@Before的方法要在测试方法之前执行
注解可以放在注解、类、成员变量、方法上
注解需要三要素:定义、使用、读取并执行(反射调用getAnnotation(Test.class))

4.1 @SpringBootApplication

spring boot简介 - 图30
spring boot简介 - 图31

4.2 @ComponentScan

包扫描会扫描只要标注了@Controller,@Service,@Repository,@Component这四个注解都会被扫描到容器中。
1、@Controller 控制器(注入服务)
用于标注控制层,相当于struts中的action层
2、@Service 服务(注入dao)
用于标注服务层,主要用来进行业务的逻辑处理
3、@Repository(实现dao访问)
用于标注数据访问层,也可以说用于标注数据访问组件,即DAO组件.
4、@Component (把普通pojo实例化到spring容器中,相当于配置文件中的
泛指各种组件,就是说当我们的类不属于各种归类的时候(不属于@Controller、@Service等的时候),我们就可以使用@Component来标注这个类。

4.3 @component 和@bean

· @Component注解表明一个类会作为组件类,并告知Spring要为这个类创建bean。
· @Bean注解告诉Spring这个方法将会返回一个对象,这个对象要注册为Spring应用上下文中的bean。通常方法体中包含了最终产生bean实例的逻辑。

如果你想要将第三方库中的组件装配到你的应用中,在这种情况下,是没有办法在它的类上添加@Component注解的,因此就不能使用自动化装配的方案了,但是我们可以使用@Bean

备注:
@Bean详解
https://www.cnblogs.com/cxuanBlog/p/11179439.html

4.4 @EnableScheduling

启用定时任务框架
spring boot简介 - 图32
spring boot简介 - 图33

4.5 @Transactional

spring boot简介 - 图34
spring boot简介 - 图35

4.6 其它

@Transient
就是在给某个javabean上需要添加个属性,但是这个属性你又不希望给存到数据库中去,仅仅是做个临时变量,用一下。不修改已经存在数据库的数据的数据结构。

spring boot简介 - 图36

5.代码约定

5.1统一返回ResultBean对象

为了使接口有统一返回格式,便于前台代码重用,约定ResultBean为返回对象,所有返回数据放入泛型data中。此外也有利于aop统一处理异常。
spring boot简介 - 图37
前台接口使用示例:因为返回格式相同,所以可以使用通用的处理方法(handlerResult)
spring boot简介 - 图38

5.2异常处理

对resultBean的构造方法做环绕切面
spring boot简介 - 图39
异常分为运行时异常和非运行时异常。在遇到非运行时异常必须处理时,可以包装为运行时异常抛出,由aop统一捕获处理。在定义错误码后,提供前台清晰的错误提示。
spring boot简介 - 图40
spring boot简介 - 图41

5.3参数校验

因为使用了统一捕获处理异常,则可使用校验工具类,直接抛出给前台错误日志。此外也可以减少if…else的层数
spring boot简介 - 图42

备注:
代码规范可以参考
https://xwjie.github.io/rule/