@RequestParam:
1、在前端传入多个相同的属性时,若使用数组接收,则无需使用@RequestParam注解。若使用集合接收,则须使用@RequestParam来绑定参数。
2、当前端发送的属性名与服务端接收的不一致时,可以使用@RequestParam(接收的属性名=“前端发来的属性名”)来绑定接收,括号里面有个required属性,默认为true,若为true,则表示绑定的属性不可为空,不然会报错。若为false则不会报错。
3、 @RequestParam(defaultValue = “1”) Integer page, @RequestParam(defaultValue = “10”) Integer pageSize
当前端传来null时,defaultValue属性设置默认值
@DateTimeFormat:
@DateTimeFormat里面有个pattern属性,用于指定前端传来的日期时间格式,如:
@DateTimeFormat(pattern = “yyyy-MM-dd HH:mm:ss”)
@RequestBody
@RequestBody可以将前端发送来的json格式的参数封装进一个实体类对象中,
前端以JSON格式发送实体类对象请求必须用@RequestBody注解,不使用@RequestBody注解则需要以form-data的方式接收。
@PathVariable
用于获取路径变量,并绑定给形参。有时候前端请求的路径不是写死的,比如是和id相关的,每个人的id不同,访问路径也不同,就需要设置路径变量,变量是多少,路径就是多少,如:
http://localhost:8080/pathParam/521
http://localhost:8080/pathParam/125
后面的521和125就是不同的路径变量
@RequestMapping
@RequestMapping
当注解在类上时,其路径为父路径,该类中的方法的路径为子路径。如:类的注解为@RequestMapping(“/parent”),该类某个方法的注解为@RequestMapping(“/get”),则该方法的请求路径为…/parent/get
路径参数:/{变量}
@RequestMapping("/pathParam/{id}")
public String pathParam(@PathVariable Integer id){
System.out.println(id);
return "OK";
}
当传入多个路径参数时:
http://localhost:8080/pathParam/521/cxl
http://localhost:8080/pathParam/125/陈熙龙
@RequestMapping("/pathParam/{id}/{name}")
public String pathParam(@PathVariable Integer id,@PathVariable String name){
System.out.println(id+":"+name);
return "OK";
}
@RestController
@RestController = @Controller + @ResponseBody
@ResponseBody
@ResponseBody 使用在Controller方法上或者类上 ,将方法返回值直接响应,如果返回值类型是 实体对象/集合/数组,将会转换为JSON格式相应
@Component(建议使用其衍生注解:@Controller,@Service,@Repository,用于区分哪个层的)
@Component(value = “bean名”),value可以省略,其三个衍生注解同样可以指定bean名,bean的名字默认为首字母小写的类名。注:声明控制器bean只能使用@Controller
常用于DAO层和Service层的类上,将当前类交给IOC(控制反转)容器管理,成为IOC容器中的bean,也可用于Dao层和Service层之外的其他类
如:
@Component
public class EmpService {
@Autowired
private EmpDao empDao;
@Controller
@Component的衍生注解,标注在Controller/控制器类上,作用与@Component一样,用的少,@RestController包含@Controller
@Service
@Component的衍生注解,标注在Service/业务类上,作用与@Component一样
@Repository
@Component的衍生注解,标注在DAO/数据访问类上,作用与@Component一样(由于与mybatis整合,用的少)
@ComponentScan
用于扫描bean的,未被扫描到的bean即为不存在于IOC容器,隐式的配置在启动类上,默认的扫描范围是启动类所在包及其子包 。@ComponentScan({{“指定要扫描的包”,“…”}}),一旦指定,就得额外显式声明默认范围
@Autowired
常用于Service层与Controller层分别声明的DAO层接口属性和Service层接口属性上,程序运行时,IOC容器会提供该类型的bean对象,并赋值给该变量 DI-依赖注入,默认是按照类型注入
如:
public class EmpController {
@Autowired
private EmpService empService;
@Primary,@Qualifier
由于@Autowired注解是按照类型注入的,一旦同一个类型的bean有多个,就不知道注入哪个,会报错。
@Primary,@Qualifier 就是为了解决这个问题,
@Primary可以指定bean的优先级,类在使用@Autowired的同时加上@Primary,就会优先注入此类的bean.
@Qualifier可以声明要注入bean的名字,类在使用@Autowired的同时加上@Qualifier,就会优先注入此bean,@Qualifier(“名字”)。
@Resource
@Autowired注解默认是按照类型注入的,而@Resource是按照bean名字来注入的,@Resource(name=“bean名”),可以替代@Autowired,此注解是jdk提供的,而@Autowired是Spring框架提供的
@Value(“${引用类型的值}” / “值”)
用于注入配置文件中的配置,为属性赋值,如
类中:
@Value(“${aliyun.oss.endpoint}”)
private String endpoint;
配置文件中:
aliyun.oss.endpoint=https://oss-cn-nanjing.aliyuncs.com
@ConfigurationProperties(prefix=“前缀”)
用于注入配置文件的配置,需要与@Data和@Component同时使用才能生效,获取配置信息的值可以通过@Autowired 然后调用get方法来获取,如
aliyun:
oss:
endpoint: https://oss-cn-nanjing.aliyuncs.com
accessKeyId: LTAI5t9XbmziYWNSZTBjMAAJ
accessKeySecret: cFN2l4a1EXDWdSBdW2QbpnfpkTzQrL
bucketName: web-tlias-cxl
@Data
@Component
@ConfigurationProperties(prefix = "aliyun.oss")
public class AliOSSUtils {
private String endpoint;
private String accessKeyId;
private String accessKeySecret;
private String bucketName;
@Autowired
private AliOSSUtils alioss;
alioss.getEndPoint();
......
@Transactional
使用在方法、类、接口上,用于开启事务、回滚、提交事务。 多用于有多次访问的增删改查的Controller类方法上 ,默认情况下只有出现RuntimeException才会回滚异常,
rollbackFor属性可以控制出现何种异常类型时回滚事务
@Transactional(rollbackFor = Exception.class)
//用于所有异常
事务传播行为:指的是当一个事务方法被另一个事务方法调用时,这个事务方法应该如何进行事务控制
propagation属性可以指定传播行为
@Transactional(propagation = Propagation.REQUIRED)
//默认行为
readonly
属性可以设置事务为只读,为true
时生效。事务中不会对数据库进行写操作。
这个参数对于数据库性能优化很有用,特别是在高并发的系统中。当一个事务被标记为只读时,数据库可以在一些情况下优化事务的处理,例如避免加锁等。这对于提高只读查询的吞吐量非常有帮助。总的来说,@Transaction(readonly=true)
是一个有用的工具,可以在只读操作上提供额外的保障和性能优势,即使这些操作不需要ACID属性。
但是,需要注意的是,只读事务并不意味着完全无锁。是否加锁还取决于具体的数据库和隔离级别设置。
yml文件中开启事务管理日志:
logging:
level:
org.springframework.jdbc.support.JdbcTransactionManager: debug
@CrossOrigin
进行前后端资源访问的跨域处理