SpringBoot其实就是Spring的简化版本,因为Spring依赖的项目太多,其xml文件的配置显得尤为繁琐,因此出现了一键配置的SpringBoot框架
SpringBoot项目生成方法
在idea中构建一个springboot项目的方法如下:
- 点击new->project->Spring initializr,选好java版本后点击下一步
- 配置项目的名称等信息,点击下一步
- 在可选插件中选择需要的插件,一般来说只用选择web->web就行了
- 最后输入项目名称点击结束即可生成项目
运行方法
一共有3种方法
- 通过idea运行:直接在idea中找到java主文件,然后点击run,即可运行
- 用maven启动:
mvn spring-boot:run
- 通过maven编译成jar后启动:
mvn install
->java -jar xxx.jar
配置文件
有两种配置文件的配置方法:
applicaiton.properties:就是直接赋值的方法
1
2server.port=8081
server.servlet.context-path=/girlapplicaiton.yml:以yaml格式进行配置
1
2
3
4server:
port: 8081
servlet:
context-path: /girl
在配置文件中还可以加入一些自定义的内容,比如一些变量的值,然后在网页中使用,比如我们加入身高Height
1 | server: |
然后在新建的HelloControler.java
类中打印这个变量
1 |
|
也可以把配置写到一个类里面:
现在yml配置文件中写入配置:
1
2
3girl:
Height: 165
age: 18新建一个用于存放这些变量类,
GirlProperties.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class GirlProperties {
private String Height;
private Integer age;
public String getHeight() {
return Height;
}
public void setHeight(String height) {
Height = height;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}在需要调用的类里面新建一个对象
GirlProperties
,用@Autowired
(自动装配)关键字修饰1
2
3
4
5
6
7
8
9
10
public class HelloControler {
GirlProperties girlProperties;
public String say(){
return girlProperties.getHeight() + girlProperties.getAge();
}
}
多个配置文件切换
建立多个配置文件,如下:
1 | application.yml |
在dev和prod两个文件中分别填上需要的配置,然后在applicaiton.yml中指定需要激活的配置
1 | spring: |
Controller的使用
controller是用来处理http请求的
名称 | 作用 |
---|---|
@Controller |
处理http请求 |
@RestController |
Spring4之后的注解,原来返回json需要@ResponseBody 配合@Controller |
@RequestMapping |
配置url映射 |
还有几个参数注解
名称 | 作用 |
---|---|
@PathVariable |
获取url中的数据 |
@RequestParam |
获取请求参数的值 |
@GetMapping |
组合注解 |
@PathVariable
用法如下:
1 |
|
@RequestParam
用法如下:
1 |
|
当你访问http://127.0.0.1:8080/hello?id=12233
即可与得到显示id的页面
@GetMapping
等同于将上面的@RequestMapping(value = "/hello",method = RequestMethod.GET)
简化,此时只需要填一个值就好了,方法已经设置为get了
数据库操作
现在pom.xml中添加mysql的依赖,注意,这里要在idea的设置中,将maven的设置加上always update snapshot
1 | <dependency> |
然后再在application.yml
中加入对mysql的配置
1 | spring: |
此时只需要建立一个Girl类,在其中加入id
,height
,age
等字段,即可运行时自动生成表,注意:最上面要加入@Entity
,id要自增的话要加入@Id
,@GeneratedValue
1 |
|
对数据库的增删改查
在GirlController.java
这个类里面进行增删改查,要创建一个专用的GirlRepository.java
类用于操作数据库
GirlRepository.java
是一个接口类,继承自JpaRepository
1 | package com.drawon.demo; |
GirlController.java
1 | package com.drawon.demo; |
事务管理
比如我们同时操作多条数据,有可能会失败,但是前面那些我希望已经插入的可以回滚到未插入的状态。
也就是说,我们要求插入多条数据的时候,要么同时插入,要么一条也不插入。
此时用到Transactional
关键字,新建一个GirlService.java
GirlService.java
,在事务操作前面加上@Transactional
关键字
1 | package com.drawon.demo; |
然后在controller里面调用这个service
1 | //添加2个girl |
表单验证
验证表单的值是否满足要求,不满足要求的时候终止提交
比如在girl项目中,我们限制年龄小于18的进入,在Girl.java
中定义如下内容:
1 | public class Girl { |
用@valid
进行验证,返回BindingResult验证结果,用BindingResult.hasErrors()
方法检测有没有错误,有错误就直接返回null
1 |
|
使用AOP(Aspect Oriented Programming)处理请求
AOP是一种编程思想,意思是面向切面编程
AOP主要思想是将通用模块独立出来,以便代码复用
比如我们要对所有的内容写入log,我们此时只需要建立一个HttpAspect类,使用aspect之前先在pom.xml
中添加依赖
1 | <dependency> |
然后建立一个aspect文件夹,在其中加入httpAspect类,用@Aspect
和@component
注解
1 |
|
@Before("execution(public * com.drawon.demo.controller.GirlController.*(..))")
保证了监听所有GirlController
类中的方法,一定要写*(..)
,不然不会监听所有函数
上面这段aspect的代码,其中的before和after注解后面的内容很长,并且重复了,我们想要增加代码复用性,简洁性,我们要把这一段抽出来,用pointcut
关键字来表示,pointcut是切面编程中要切的点。
1 |
|
然后我们需要将之前的system.out.println
修改为spring自带的log模块来打印
1 |
|