前言:主要是体现一个极简的编程风格,大部分都可以通过注解来完成~通过来做一个简单的resuful api增删改查功能~
1. 使用Spring创建Spring Boot项目
在网站上https://start.spring.io或者通过IDEA自带的、版本选择1.5几的、一般的在在serch for dependency选择web。
2.工程结构
main是写代码的,test是用于单元测试的,对于第一次导入jar包的话,在maven中一定要配置阿里云镜像中央仓库,否则就是龟速了。
所有的启动类都在@SpringBootApplication注解上,从这个入口开始进。
还有一个配置文件application.propertiea,不过推荐写成yml文件,结构清晰
3.启动方式与配置文件
3.1 启动方式共有3种:
- 在有SpringBootApplication注解上右键run
- 在项目文件下,mvn spring-boot:run
- 在项目文件下,先执行mvn install(先编译),再进入target目录下找到对应的jar文件,执行 java -jar jar文件(右键tab自动,IDEA的终端就是显示当前的项目文件) 类似文件形式:java -jar xxx-0.0.1-SNAPSHOT.jar
既然三种都能启动成功、那么看看配置文件有什么作用? 不过推荐写成yml文件格式~
访问网址:http://localhost:8081/student/hello
假如有很多个属性的话,那么一个一个写就很麻烦了~
student:
score: 95
age: 17
---------------
@Component
@ConfigurationProperties(prefix = "student") // 配置文件student开头的
public class StudentProperties {
private String score;
private Integer age;
public String getScore(){
return score;
}
public void setScore(String score){
this.score = score;
}
}
假如现在有多个配置,那么怎么同时打开呢? 多环境配置~
这里就是之前执行的三种方式。用命令行启动另外的项目~
3.注解
@RestController注解是组合注解,Controller 和ResponseBody
对模板的使用不用做太多了解,现在前后端分离,后端一般是提供rest接口,返回json格式给前端,使用模板会给性能带来损耗。模板就是返回的页面,官方默认的thymleaf(在pom配置一下),然后新建一个html文件。
处理请求参数
@PathVariable 获取url中的数据
@RequestParam 获取请求参数的值,可以设定多个参数、
@GetMapping 组合注解
Pathvariable中用的是 http://localhost:8080/hello/12
@RequestMapping(value = "/hello/{id}", method = RequestMethod.GET)
public String say(@PathVariable("id") Integer idd){
return "id:"+ idd;
}
那url用传统的方式 http://localhost:8080/hello?id=2
@RequestMapping(value = "/hello", method = RequestMethod.GET)
// @GetMapping("value = "/hello") 简写版
public String say(@RequestParam(value = "id", required = false, defaultValue = "0") Integer idd){
return "id:"+ idd;
}
4. 处理数据库 Jpa
Spring-Data-Jpa(Java Persistence API)定义了一系列对象持久化的标准,实现这一规范常见的有Hibernate。
相关JPA的注解:
@Entity:@Table(name=”“):表明这是一个实体类。一般用于jpa这两个注解一般一块使用,但是如果表名和实体类名相同的话,@Table可以省略
@MappedSuperClass:用在确定是父类的entity上。父类的属性子类可以继承。
@NoRepositoryBean:一般用作父类的repository,有这个注解,spring不会去实例化该repository。
@Column:如果字段名与列名相同,则可以省略。
@Id:表示该属性为主键。
@GeneratedValue(strategy = GenerationType.SEQUENCE,generator = “repair_seq”):表示主键生成策略是sequence(可以为Auto、IDENTITY、native等,Auto表示可在多个数据库间切换),指定sequence的名字是repair_seq。
@SequenceGeneretor(name = “repair_seq”, sequenceName = “seq_repair”, allocationSize = 1):name为sequence的名称,以便使用,sequenceName为数据库的sequence名称,两个名称可以一致。
@Transient:表示该属性并非一个到数据库表的字段的映射,ORM框架将忽略该属性。如果一个属性并非数据库表的字段映射,就务必将其标示为@Transient,否则,ORM框架默认其注解为@Basic。@Basic(fetch=FetchType.LAZY):标记可以指定实体属性的加载方式
@JsonIgnore:作用是json序列化时将java bean中的一些属性忽略掉,序列化和反序列化都受影响。
@JoinColumn(name=”loginId”):一对一:本表中指向另一个表的外键。一对多:另一个表指向本表的外键。
@OneToOne、@OneToMany、@ManyToOne:对应Hibernate配置文件中的一对一,一对多,多对一。
例子,RESTful API设计
请求类型 | 请求路径 | 功能 |
GET | /students | 获取学生列表 |
POST | /students | 创建一个学生 |
GET | /students/id | 通过id查询一个学生 |
PUT | /students/id | 通过id更新一个学生 |
DELETE | /students/id | 通过id删除一个学生 |
添加jpa,mysql包 ,配置文件中配置mysql,数据库新建,基本字符集为utf-8mb4,数据排列utf8mb4genera
就是一个简单的增删改查,就不讲了~
5. 事务@Transaction
同时操作多条数据,只有查询的时候不用加事务~
6. 表单验证:
@Valid 配合BindingResult,信息存进去, @Min, @Max
7. AOP统一处理请求日志
是一种编程范式,是一种程序设计思想。
@Pointcut定义一个切入点,after,before,afterRunning,afterThrowing,around进行通知注解和调用切入点
获取一些类方法和参数,需要传入一个joinPoint类。