注解
spring + springboot + springmvc + hibernate + mybatis
1、@Data Lombok插件 里面包含了get、set 、等方法
2、@NoArgsConstructor 无参构造函数
3、@AllArgsConstructor 有参构造函数
4、@Entity 实体类的注解
5、@Table(name="SYS_USER")
数据库中的表名与实体类中创建的表名不一致的时候添加注解
@Data @NoArgsConstructor @AllArgsConstructor @Entity @Table(name = "USER") public class User implements Serializable {} //序列化
6、@Id 表示主键 @Type 类型 @Column 用在字段与数据库中的字段不符合
@Id @Type(type = "org.hibernate.type.PostgresUUIDType") @Column(name = "USER_ID") private UUID userId = UUID.randomUUID();
7、@ApiModelProperty 表示对model属性的字段说明 ;
@JsonView 用于在不同的请求中返回不同的视图。
public interface xxxView {} //用户列表的展示 @ApiModelProperty(value = "ajfb") @JsonView(xxxView.class) private String username;
8、不能为空的三个注解
//只能作用在spring上,不为空,而且调用trim()后,长度必须大于0 @NotBlank(message = "用户名不能为空") //不为空,但是可以为空字符串 @NotNull //不为空,也不能为空字符串,长度必须大于0 @NotEmpty
9、时间的三个注解
//后台到前台的时间格式的转换 @JsonFormat(pattern="yyyy-MM-dd",timezone = "GMT+8") //hibernate的注解 @Temporal(TemporalType.DATE)(精确到年月日) @Temporal(TemporalType.TIME)(精确到时分秒) @Temporal(TemporalType.TIMESTAMP)(默认年月日时分秒) //前台到后台的时间格式的转换 @DateTimeFormat(pattern = "yyyy-MM-dd") private Date date;
10、 @Transient 保证在实体类中添加的字段不往数据库中进行添加
11、@JsonIgnore 忽略字段
可以用在Field或者Getter方法上,用在Setter方法时,和Filed效果一样。这个注解只能用在POJO存在的字段要忽略的情况 。
@Transient @JsonIgnore private String name;
@JsonIgnoreProperties(ignoreUnknown = true),将这个注解写在类上之后,就会忽略类中不存在的字段,可以满足当前的需要。这个注解还可以指定要忽略的字段。使用方法如下:
@JsonIgnoreProperties({ "internalId", "secretKey" })
用来指定的字段不会被序列化和反序列化。
@JsonIgnoreProperties(ignoreUnknown = true) class ExtraBean { private boolean is_museuser }
12、@RestController
= @Controller + @ResponseBody Controller层的注解
13、依赖注入
@Autowired 按照ByType 自动注入 @Resource 按照ByName 自动注入
14、@Value
@Autowired private UserRepository userRepository;
15、 @Modifying + @Query
在@Query注解中编写JPQL实现DELETE和UPDATE操作的时候必须加@modifying注解,以通知Spring Data 这是一个DELETE或UPDATE操作。
@Param 给参数命名
@Modifying @Query(value = "delete xx", nativeQuery = true) void deleteByUserId(@Param(value = "userId") UUID userId);
16、@Service Service(业务)层的注解
17、@Transactional 事务管理
UPDATE或者DELETE操作需要使用事务,此时需要 定义Service层,在Service层的方法上添加事务操作。
@Service @Transactional public class UserServiceImpl implements UserService { }
18、@JoinTable
指定该连接表的表名 在实体类中添加在字段前面
@JoinColumn 注释的是另一表指向本表的主键
@JoinTable(name = "表名", joinColumns ={@JoinColumn(name = "xxx_ID", referencedColumnName = "xxx_ID")},inverseJoinColumns = {@JoinColumn(name = "yyy_ID", referencedColumnName = "yyy_ID")})
19、两表的关系
①、多对一或者一对多(一表的多条记录对应另一表的唯一一条记录)
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "user") @ManyToOne(fetch = FetchType.LAZY) //懒加载 //急加载 FetchType.EAGER //在加载一个实体的时候,其中定义是急加载的属性和字段会立即从数据库中加载
②、一对一
@OneToOne(cascade = {CascadeType.REFRESH}, fetch = FetchType.EAGER)
③、多对多
@ManyToMany(cascade = {CascadeType.REFRESH}, fetch = FetchType.EAGER)
20、@FeignClient(value="服务名称",url="地址")
21、swagger的注解
//用来声明是swagger的资源 @Api(tags = "rest相关操作") public class Rest { //用来构建api文档 @ApiOperation(value = "xxxx") //URL @GetMapping @PutMapping @DeleteMapping... @PostMapping("/xxx") //@RequestBody 接受的是一个Json对象的字符串 public Object getUser(@RequestBody User user){ }
22、@PathVariable
@PathVariable绑定URI模板变量值 @PathVariable是用来获得请求url中的动态参数的 @PathVariable用于将请求URL中的模板变量映射到功能处理方法的参数上。 //配置url和方法的一个关系@RequestMapping("item/{itemId}")
23、@Valid 校验
@Valid注解可以实现数据的验证,你可以定义实体,在实体的属性上添加校验规则,而在API接收数据时添加@valid关键字,这时你的实体将会开启一个校验的功能。
@Null 限制只能为null @NotNull 限制必须不为null @AssertFalse 限制必须为false @AssertTrue 限制必须为true @DecimalMax(value) 限制必须为一个不大于指定值的数字 @DecimalMin(value) 限制必须为一个不小于指定值的数字 @Digits(integer,fraction) 限制必须为一个小数,且整数部分的位数不能超过integer,小数部分的位数不能超过fraction @Future 限制必须是一个将来的日期 @Max(value) 限制必须为一个不大于指定值的数字 @Min(value) 限制必须为一个不小于指定值的数字 @Past 限制必须是一个过去的日期 @Pattern(value) 限制必须符合指定的正则表达式 @Size(max,min) 限制字符长度必须在min到max之间 @Past 验证注解的元素值(日期类型)比当前时间早 @NotEmpty 验证注解的元素值不为null且不为空(字符串长度不为0、集合大小不为0) @NotBlank 验证注解的元素值不为空(不为null、去除首位空格后长度为0),不同于@NotEmpty,@NotBlank只应用于字符串且在比较时会去除字符串的空格 @Email 验证注解的元素值是Email,也可以通过正则表达式和flag指定自定义的email格式
24、@CacheEvict 删除存中的数据
spring的缓存注解,@CacheEvict是用来标注在需要清除缓存元素的方法或类上的。当标记在一个类上时表示其中所有的方法的执行都会触发缓存的清除操作。
@CacheEvict可以指定的属性有value、key、condition、allEntries和beforeInvocation。其中value、key和condition的语义与@Cacheable对应的属性类似。即value表示清除操作是发生在哪些Cache上的(对应Cache的名称);key表示需要清除的是哪个key,如未指定则会使用默认策略生成的key;condition表示清除操作发生的条件。
@Cacheable会自动将查找到的redis中没有的数据存到redis中;适用于批量查询,当还有查询某一条数据的需求是,修改方法可以增加一个@CachePut方法
小结:@Cacheable是想缓存中添加数据,@CacheEvict是删除缓存中数据,@CachePut是更新缓存中数据