spring boot注解(二)
-
JPA,在服务器启动的时候,jpa的启动管理类会自动扫荡继承了JpaRepository的接口,然后添加到动态代理管理中,然后注入到spring的容器中。
-
@Entity当实体类名和表名相同,实体属性和表字段相同时,会默认完成实体属性和表字段的映射,当表名和实体类名不同,表字段和实体属性不同时,需要使用@Table和@Column注解完成实体和表直接的映射
查看@Entity注解,发现其只有一个属性name,表示其所对应的数据库中的表名
-
@Table当实体类与其映射的数据库表名不同名时需要使用 @Table注解说明,该标注与 @Entity 注解并列使用,置于实体类声明语句之前,
@Table注解的常用选项是 name,用于指明数据库的表名 @Table注解还有两个选项 catalog 和 schema 用于设置表所属的数据库目录或模式,通常为数据库名
-
@Column注释定义了将成员属性映射到关系表中的哪一列和该列的结构信息
-
@Id注释指定表的主键
-
-
使用@SpringBootTest后,Spring将加载所有被管理的bean,基本等同于启动了整个服务,此时便可以开始功能测试。
由于web服务是最常见的服务,且我们对于web服务的测试有一些特殊的期望,所以@SpringBootTest注解中,给出了webEnvironment参数指定了web的environment,该参数的值一共有四个可选值:
-
MOCK:此值为默认值,该类型提供一个mock环境,可以和@AutoConfigureMockMvc或@AutoConfigureWebTestClient搭配使用,开启Mock相关的功能。注意此时内嵌的服务(servlet容器)并没有真正启动,也不会监听web服务端口。
-
RANDOM_PORT:启动一个真实的web服务,监听一个随机端口。
-
DEFINED_PORT:启动一个真实的web服务,监听一个定义好的端口(从application.properties读取)。
-
NONE:启动一个非web的ApplicationContext,既不提供mock环境,也不提供真实的web服务。
-
注:如果当前服务的classpath中没有包含web相关的依赖,spring将启动一个非web的ApplicationContext,此时的webEnvironment就没有什么意义了。使用@Transactional 自动回滚测试数据
-
EnableCaching,启用缓存注解
-
@Cacheable,缓存中有就使用缓存数据,参数如下:
-
value、cacheNames:两个等同的参数(cacheNames为Spring 4新增,作为value的别名),用于指定缓存存储的集合名。由于Spring 4中新增了@CacheConfig,因此在Spring 3中原本必须有的value属性,也成为非必需项了
-
key:缓存对象存储在Map集合中的key值,非必需,缺省按照函数的所有参数组合作为key值,若自己配置需使用SpEL表达式,比如:
-
@Cacheable(key = "#p0"):使用函数第一个参数作为缓存的key值
-
@Cacheable(value="user",key = "#user.id"):缓存使用参数user作为value,user.id作为key
-
-
condition:缓存对象的条件,非必需,也需使用SpEL表达式,只有满足表达式条件的内容才会被缓存,比如:@Cacheable(key = "#p0", condition = "#p0.length() < 3"),表示只有当第一个参数的长度小于3的时候才会被缓存。
-
unless:另外一个缓存条件参数,非必需,需使用SpEL表达式。它不同于condition参数的地方在于它的判断时机,该条件是在函数被调用之后才做判断的,所以它可以通过对result进行判断。
-
keyGenerator:用于指定key生成器,非必需。若需要指定一个自定义的key生成器,我们需要去实现org.springframework.cache.interceptor.KeyGenerator接口,并使用该参数来指定。需要注意的是:该参数与key是互斥的
-
cacheManager:用于指定使用哪个缓存管理器,非必需。只有当有多个时才需要使用
-
cacheResolver:用于指定使用那个缓存解析器,非必需。需通过org.springframework.cache.interceptor.CacheResolver接口来实现自己的缓存解析器,并用该参数指定。
-
-
@CacheEvict,清除缓存
-
@CachePut,更新或添加缓存
-
@CacheConfig,配置该类中会用到的一些共用的缓存配置
-
-
校验controller参数有效性的注解
-
@NotBlank、@NotNull、@Max...等一系列注解,用在entity类的属性上,校验属性有效性
-
@Valid,用在controller方法的参数上,校验实体类属性的有效性,使用BindingResult获取验证结果
//entity
public class User {
/** 姓名 */
-
-
@NoRepositoryBean:确保添加了该注解的 repository 接口不会在运行时被创建实例。 也就是说,使用了该注解的接口不会被单独创建实例,只会作为其他接口的父接口而被使用。
在服务器启动的时候,jpa的启动管理类会自动扫荡继承了JpaRepository的接口,然后添加到动态代理管理中,然后注入到spring的容器中。
即使用了该注解的接口不会被加入到spring的容器中,继承该接口的子接口会被加入到spring的容器中。
-
@Autowired:默认根据类型注入,当同一个接口有多个实现类时,只使用@Autowired会报错,因为spring不知道应该注入哪个实现类的bean,有下面两种解决方法
-
@Qualifier:在@Autowired后面使用,根据bean的名称注入
-
@Primary:在实现类加入容器时使用,告诉spring优先使用这个实现类的bean