yaml语法
# k = v
# 普通的key-value
name: chenmou
# 对象
student:
name: chenmou
age: 3
#行内写法
student1: {name: chenmou,age: 3}
#数组
pets:
- cat
- dog
- pig
pets1: [cat,dog,pig]
#一定注意这些空格
yaml实现给属性赋值:
-
创建springboot项目,勾上spring Web
-
在chen目录创建pojo文件夹,写一个实体类,加上有无参构造,toString、get、set方法。注意:pojo和Spring02ConfigApplication(创建项目时自动产生的)要在同一级目录下,不然无法正常运行。
package com.chen.pojo; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; @Component //注册bean到容器中 public class Dog { @Value("旺财") //@Value给bean注入属性值 private String name ; @Value("3") private Integer age ; public Dog() { } public Dog(String name, Integer age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "Dog{" + "name='" + name + '\'' + ", age=" + age + '}'; } }
做完这些就可以测试了,如下
package com.chen.spring02config;
import com.chen.pojo.Dog;
import com.chen.pojo.Person;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class Spring02ConfigApplicationTests {
@Autowired(required = false) //将狗狗自动注入进来
//(required = false)报错可加上
Dog dog;
@Test
void contextLoads() {
System.out.println(dog);
}
}
再写个复杂一些的Person类
package com.chen.pojo;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
import java.util.Map;
/*
@ConfigurationProperties作用:
将配置文件中配置的每一个属性的值,映射到这个组件中;
告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定
参数 prefix = “person” : 将配置文件中的person下面的所有属性一一对应
*/
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
private String name;
private Integer age;
private Boolean happy;
private Date birth;
private Map<String,Object> maps;
private List<Object> lists;
private Dog dog;
public Person() {
}
public Person(String name, Integer age, Boolean happy, Date birth, Map<String, Object> maps, List<Object> lists, Dog dog) {
this.name = name;
this.age = age;
this.happy = happy;
this.birth = birth;
this.maps = maps;
this.lists = lists;
this.dog = dog;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Boolean getHappy() {
return happy;
}
public void setHappy(Boolean happy) {
this.happy = happy;
}
public Date getBirth() {
return birth;
}
public void setBirth(Date birth) {
this.birth = birth;
}
public Map<String, Object> getMaps() {
return maps;
}
public void setMaps(Map<String, Object> maps) {
this.maps = maps;
}
public List<Object> getLists() {
return lists;
}
public void setLists(List<Object> lists) {
this.lists = lists;
}
public Dog getDog() {
return dog;
}
public void setDog(Dog dog) {
this.dog = dog;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
", happy=" + happy +
", birth=" + birth +
", maps=" + maps +
", lists=" + lists +
", dog=" + dog +
'}';
}
}
相比于Dog类,不在使用@Value赋值,而是使用yaml来进行赋值,如下:
person:
name: chenmou
age: 3
happy: false
birth: 2002/01/17
maps: {k1: v1,k2: v2}
lists:
- code
- girl
- music
dog:
name: 旺财
age: 1
测试一下:
package com.chen.spring02config;
import com.chen.pojo.Dog;
import com.chen.pojo.Person;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class Spring02ConfigApplicationTests {
@Autowired
// Dog dog;
Person person;
@Test
void contextLoads() {
// System.out.println(dog);
System.out.println(person);
}
}
JSR03校验检测
使用校验检测可以增加安全性
@Component //注册bean
@ConfigurationProperties(prefix = "person")
@Validated //数据校验
public class Person {
@Email(message="邮箱格式错误") //name必须是邮箱格式
private String name;
}
Springboot常用注解含义记录
@SpringBootApplication //是Sprnig Boot项目的核心注解,目的是开启自动配置
@ResponseStatus(HttpStatus.NOT_FOUND)
//可以实现自定义的一些异常,同时在页面上进行显示
//一种是加载自定义异常类上,一种是加在目标方法中,当修饰一个类的时候,通常修饰的是一个异常类
@Controller
@Controller用于标记在一个类上,使用它标记的类就是一个SpringMvc Controller对象,分发处理器会扫描使用该注解的类的方法,并检测该方法是否使用了@RequestMapping注解。
@Controller只是定义了一个控制器类,而使用@RequestMapping注解的方法才是处理请求的处理器。
@GetMapping
@GetMapping 组合注解,是@RequestMapping(method = RequestMethod.GET)的缩写. 为了处理各自的传入请求方法类型,即*@GetMapping用于处理请求方法的GET*类型.
@RequestMapping
是一个注解,用来标识 http 请求地址与 Controller 类的方法之间的映射。
可作用于类和方法上,方法匹配的完整是路径是 Controller 类上 @RequestMapping 注解的 value 值加上方法上的 @RequestMapping 注解的 value 值。
@RequestParam
获取请求参数的值
@Service
1、 其getBean的默认名称是类名(头字母小写),可以@Service(“xxxx”)这样来指定,
2、其定义的bean默认是单例的,可以使用@Service(“beanName”) @Scope(“prototype”)来改变。
3、可以通过@PostConstruct和@PreDestroy指定初始化方法和销毁方法(方法名任意)
@Autowired
Spring 2.5 引入了 @Autowired 注释,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。 通过 @Autowired的使用来消除 set ,get方法。
@Override
如果想重写父类的方法,比如toString()方法的话,在方法前面加上@Override 系统可以帮你检查方法的正确性
@Entity
@Table(name = “t_blog”)
指数据库表对应的实体类,在实体类头上必须先标注该类为实体类
标识一个实体类对应一个表
@Id @GeneratedValue
@Id 标注用于声明一个实体类的属性映射为数据库的主键列。该属性通常置于属性声明语句之前,可与声明语句同行,也可写在单独行上.
@GeneratedValue 用于标注主键的生成策略,通过strategy 属性指定.
Temporal
Temporal注解的作用就是帮Java的Date类型进行格式化,一共有三种注解值:
第一种:@Temporal(TemporalType.DATE)——>实体类会封装成日期“yyyy-MM-dd”的 Date类型。
第二种:@Temporal(TemporalType.TIME)——>实体类会封装成时间“hh-MM-ss”的 Date类型。
第三种:@Temporal(TemporalType.TIMESTAMP)——>实体类会封装成完整的时间“yyyy-MM-dd hh:MM:ss”的 Date类型。
@Temporal(TemporalType.TIMESTAMP)
private Date createTime;
@OneToOne
在一对一的关系中,只需在主控方(数据总表)内注明@OneToOne,而被控方(员工表)只是作为外键,不需任何特殊标记。
@OneToMany和@ManyToOne
公司(组织)表相对于部门表是被控方,只需在被控方写mappedBy,其值为主控方中引用的外键对象的名称。
@Entity
@Table(name = "costume_all_id")
public class AllId extends AbstractEntity {
private static final long serialVersionUID = 1L;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "costume_member_fk")
private Member member;// 用户表外键
@Entity
@Table(name = "costume_organization")
public class Organization extends AbstractEntity {
private static final long serialVersionUID = 1L;
@Column(nullable = false, length = 50)
private String name; // 组织名称
@OneToMany(mappedBy = "organization")
private Set<Department> departmentSet; // 部门集合
@ControllerAdvice
在Spring里,我们可以使用@ControllerAdvice来声明一些全局性的东西,最常见的是结合@ExceptionHandler注解用于全局异常的处理。
@ControllerAdvice是在类上声明的注解,其用法主要有三点:
- @ExceptionHandler注解标注的方法:用于捕获Controller中抛出的不同类型的异常,从而达到异常全局处理的目的;
- @InitBinder注解标注的方法:用于请求中注册自定义参数的解析,从而达到自定义请求参数格式的目的;
- @ModelAttribute注解标注的方法:表示此方法会在执行目标Controller方法之前执行 。
@Aspect @Component
@component 作用:类被spring管理
@aspect 相当于aop:aspect/表示通知类在当前方法中