1 新建的Spring Boot
项目中,一般都会引用spring-boot-starter
或者spring-boot-starter-web
,而这两个起步依赖中都已经包含了对于spring-boot-starter-jdbc
或spring-boot-starter-data-jpa
的依赖。 当我们使用了这两个依赖的时候,框架会自动默认分别注入DataSourceTransactionManager
或JpaTransactionManager
。 所以我们不需要任何额外配置就可以用@Transactional
注解进行事务的使用。
2 @Transactional注解只能用到public可见度的方法上,可以被应用于接口定义和接口方法,方法会覆盖类上面声明的事务
操作管理的数据表,要么都成功要么都失败,否则脏数据
解决办法:加@Transaction注解
坑点1: 遇到检查异常,就算事务开启,也无法回滚,
原因:因为Spring
的默认的事务规则是遇到运行异常(RuntimeException)
和程序错误(Error)
才会回滚。如果想针对检查异常进行事务回滚,可以在@Transactional
注解里使用 rollbackFor
属性明确指定异常。
@Transactional(rollbackFor = Exception.class)
坑点2:业务层捕捉异常后,发现事务不生效,(业务层手工捕捉并处理异常,你都把异常“吃“掉了””)Spring
自然不知道这里有错,更不会主动去回滚数据
推荐做法:在业务层抛出异常,控制层处理异常
3 全局异常处理器:@ControllerAdvice
注解
4 数据校验使用:
注解名称 | 功能 |
---|---|
@Null | 检查该字段为空 |
@NotNull | 不能为null |
@NotBlank | 不能为空,常用于检查空字符串 |
@NotEmpty | 不能为空,多用于检测list是否size是0 |
@Max | 该字段的值只能小于或等于该值 |
@Min | 该字段的值只能大于或等于该值 |
@Past | 检查该字段的日期是在过去 |
@Future | 检查该字段的日期是否是属于将来的日期 |
检查是否是一个有效的email地址 | |
@Pattern(regex=,flag=) | 被注释的元素必须符合指定的正则表达式 |
@Range(min=,max=,message=) | 被注释的元素必须在合适的范围内 |
@Size(min=, max=) | 检查该字段的size是否在min和max之间,可以是字符串、数组、集合、Map等 |
@Length(min=,max=) | 检查所属的字段的长度是否在min和max之间,只能用于字符串 |
@AssertTrue | 用于boolean字段,该字段只能为true |
@AssertFalse | 该字段的值只能为false |
基础使用,因为springboot以及导入基础包,直接使用,
首先 controller上声明@Validated 需要对数据进行校验
public AjaxResult add(@Validated @RequestBody SysUser user)
然后在对应字段Get方法 加上参数校验注解,不符合 以message信息为准,返回给前端。
@Email(message = "邮箱格式不正确")
@Size(min = 0, max = 50, message = "邮箱长度不能超过50个字符")
public String getEmail()
{
return email;
}
或者在字段上声明
@Size(min = 0, max = 30, message = "用户昵称长度不能超过30个字符")
private String nickName;