idea 快捷鍵
代码快捷
操作 | 解释 |
---|---|
Alt + 鼠标下滑 | 多选 |
alt + shift + 上下按钮 | 代码上下移动 |
Ctrl + G | 回滚到行数 |
Ctrl + 方向键右键 | 下一个关键词 |
Ctrl + alt + T | 添加try/catch |
Ctrl + alt + w | 全选 |
Ctrl + alt + 空格 | 自动补全(提示) |
方法快捷
操作 | 解释 |
---|---|
Ctrl + P | 参数提示 |
Ctrl + alt + w | 全选 |
Ctrl + alt + 方向左 | 返回上个方法 |
ctrl + F12 | 显示当前界面所有方法 |
类快捷
操作 | 解释 |
---|---|
alt+7 | 查看当前类中所有方法 |
Ctrl + N | 搜索类 |
Ctrl + alt + o | 刪除多余的包 |
注解
Mybatis-Plus
controller(控制层)
@Api
@ApiOperation
@Autowired
含义:自动装配,装配JavaBean,按照类型,通过set方法进行装配,set方法可以省略 位置:修饰成员变量
语法:@AutoWired(属性名=“属性值”)
作用: 替换:(这里指配置文件即xml中的标签)
-
@Autowired表示一个属性是否需要进行依赖注入,可以使用在属性、普通方法上、构造方法上。注解中的required属性默认是true,如果没有对象可以注入到属性,则会报出异常;
-
@Autowired加在某个属性上,spring会从ioc容器中找到bean对象注入到属性上,如果找到多个该类型的Bean对象,则再根据属性的名字从多个Bean对象中确认一个;
-
@Autowired写在set()方法上,在spring会根据方法的参数类型从ioc容器中找到该类型的Bean对象注入到方法的行参中,并且自动反射调用该方法(被@Autowired修饰的方法一定会执行),所以一般使用在set方法中、普通方法不用;
-
@Autowired使用在构造方法中:根据构造方法的形参、形参名,从ioc容器中找到该类型的Bean对象,注入到构造方法的形参中,并且执行该方法;
-
@Autowired注解在进行依赖注入的时候需要指定bean的时候,和@Qualifier注解一起使用使用@qualifier注解指定名称
-
@Autowired使用在构造方法上的细节
在同一个类上有多个构造方法上使用了@Autowired,默认情况下会报错;
解决方法:可以把@Autowired的属性required设置成为false,此时spring会自己选择使用哪一种构造方法;
spring在上述情况下的选择规则:
1.会优先考虑参数多的
(先ByType找到多个该类型的bean,再ByName进行注入)
2.如果多个类型的bean按照ByName无法注入,则去考虑参数少的进行注入,依次类推;
3.在参数个数相同、ByName,也可以注入的情况下,按照构造方法的书写顺序进行选择
@DeleteMapping
用法与RequestMapping一致,只不过是将方法指定为Delete请求方式
@GetMapping
用法与RequestMapping一致,只不过是将方法指定为Get请求方式
@PostMapping
用法与RequestMapping一致,只不过是将方法指定为Post请求方式
@PutMapping
用法与RequestMapping一致,只不过是将方法指定为Put请求方式
@RequestMapping
@RequestMapping注解是一个用来处理请求地址映射的注解,可用于映射一个请求或一个方法,可以用在类或方法上。
-
标注在方法上
-
用于方法上,表示在类的父路径下追加方法上注解中的地址将会访问到该方法
@Controller public class RequestMappingController { @RequestMapping("/testRequest") public String testRequest(){ return "success"; } }
注意:
springmvc_study02
是项目名称
-
-
标注在类和方法上
-
用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
@Controller @RequestMapping("hello") public class RequestMappingController{ @RequestMapping("/testRequest") public String testRequest(){ return "success"; } }
此时请求映射所映射的请求的请求路径为:
http://localhost:8080/springmvc_study02/hello/testRequest
-
-
@RequestMapping的属性
-
进入@RequestMapping中可发现
@Target({ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Documented @Mapping public @interface RequestMapping { String name() default ""; @AliasFor("path") String[] value() default {}; @AliasFor("value") String[] path() default {}; RequestMethod[] method() default {}; String[] params() default {}; String[] headers() default {}; String[] consumes() default {}; String[] produces() default {}; }
- value、method
- value: 指定请求的实际地址,指定的地址可以是URI Template模式;
- method:指定请求的method类型:(HTTP协议规定)GET、POST、PUT、DELETE、HEAD、OPTIONS、PATCH等;
- consumes、produces
- consumes:指定接收的处理请求的提交内容类型(Content-Type);
- produces: 指定返回的内容类型,仅当request请求头中包含该指定类型才返回, Content-Type:text/html; charset=UTF-8;
- params、headers
- params: 指定request中必须包含某些参数值 。
- param:请求必须带上指定参数 例: @RequestMapping(path=“/hello”,params = {“username=123”})
- 正确请求为:http://localhost:8080/springmvc_study02/hello/testRequest/hello?username=123
- !param:请求不可以带上某个参数 例:params = {“!username”}
- param!=value:请求所带参数值不可以等于value 例:params = {“username!=123”}
- {“param1”,“!param2”,“param3!=value”} :请求必须满足集合中的多个参数规则
- headers: 指定请求头,request中必须包含某些指定的header值。
- params: 指定request中必须包含某些参数值 。
-
@RestController
- @RestController 是@controller和@ResponseBody 的结合
- @Controller 将当前修饰的类注入SpringBoot IOC容器,使得从该类所在的项目跑起来的过程中,这个类就被实例化。
- @ResponseBody 它的作用简短截说就是指该类中所有的API接口返回的数据,甭管你对应的方法返回Map或是其他Object,它会以Json字符串的形式返回给客户端
service(逻辑层)
@Autowired
@Service
@Service注解用于类上,标记当前类是一个service类,加上该注解会将当前类自动注入到spring容器中,不需要再在applicationContext.xml文件定义bean了。类似的还包括@Component、@Repository、@Controller
@Service("courseDAO")
@Scope("prototype")
public class CourseDAOImpl extends HibernateDaoSupport implements CourseDAO{
......
}
其作用就相当于在applicationContext.xml
配置文件里配置如下信息:
<bean id="courseDAO"
class="com.study.persistent.CourseDAOImpl" scope="prototype">
......
</bean>
@Service("serviceName")
注解相当于applicationContext.xml
配置文件中配置的<bean id="serviceName">
,表示给当前类命名一个别名,方便注入到其他需要用到的类中。
@Service
注解也可以不指定serviceName
,如果不指定相当于<bean id="com.study.service.serviceName">
,com.study.service.ServiceName
就是这个类的全限定名,不加的话,默认别名就是当前类名,但是首字母小写。
@Transactional
@Transactional 用于表示开启事务。注解可以作用于接口、接口方法、类以及类方法上。
- 当作用于类上时,该类的所有 public 方法将都具有该类型的事务属性
- 当作用在方法级别时会覆盖类级别的定义
- 当作用在接口和接口方法时则只有在使用基于接口的代理时它才会生效,也就是 JDK 动态代理,而不是 Cglib 代理
- 当在 protected、private 或者默认可见性的方法上使用 @Transactional 注解时是不会生效的,也不会抛出任何异常
- 默认情况下,只有来自外部的方法调用才会被 AOP 代理捕获,也就是,类内部方法调用本类内部的其他方法并不会引起事务行为,即使被调用方法使用 @Transactional 注解进行修饰
属性 | 类型 | 描述 |
---|---|---|
value | String | 可选的限定描述符,指定使用的事务管理器 |
propagation | enum: Propagation | 可选的事务传播行为设置 |
isolation | enum: Isolation | 可选的事务隔离级别设置 |
readOnly | boolean | 读写或只读事务,默认读写 |
timeout | int (in seconds granularity) | 事务超时时间设置 |
rollbackFor | Class对象数组,必须继承自Throwable | 导致事务回滚的异常类数组 |
rollbackForClassName | 类名数组,必须继承自Throwable | 导致事务回滚的异常类名字数组 |
noRollbackFor | Class对象数组,必须继承自Throwalble | 不会导致事务回滚的异常类数组 |
noRollbackForClassName | 类名数组,必须继承自Throwable | 不会导致事务回滚的异常类名字数组 |
属性参数:
- readOnly
- 该属性用于设置当前事务是否为只读事务,设置为 true 表示只读,false 则表示可读写,默认值为 false
- rollbackFor
- 该属性用于设置需要进行回滚的异常类数组,当方法中抛出指定异常数组中的异常时,则进行事务回滚。例如:
- 指定单一异常类:@Transactional(rollbackFor=RuntimeException.class)
- 指定多个异常类:@Transactional(rollbackFor={RuntimeException.class, BusnessException.class})
- 该属性用于设置需要进行回滚的异常类数组,当方法中抛出指定异常数组中的异常时,则进行事务回滚。例如:
- rollbackForClassName
- 该属性用于设置需要进行回滚的异常类名称数组,当方法中抛出指定异常名称数组中的异常时,则进行事务回滚。例如:
- 指定单一异常类名称:@Transactional(rollbackForClassName=“RuntimeException”)
- 指定多个异常类名称:@Transactional(rollbackForClassName={“RuntimeException”,“BusnessException”})
- 该属性用于设置需要进行回滚的异常类名称数组,当方法中抛出指定异常名称数组中的异常时,则进行事务回滚。例如:
- propagation
- 该属性用于设置事务的传播行为 例如:@Transactional(propagation=Propagation.NOT_SUPPORTED)
- 事物传播行为介绍:
- @Transactional(propagation=Propagation.REQUIRED) 如果有事务, 那么加入事务, 没有的话新建一个(默认)
- @Transactional(propagation=Propagation.NOT_SUPPORTED) 容器不为这个方法开启事务
- @Transactional(propagation=Propagation.REQUIRES_NEW) 不管是否存在事务,都创建一个新的事务,原来的挂起,新的执行完毕,继续执行老的事务
- @Transactional(propagation=Propagation.MANDATORY) 必须在一个已有的事务中执行,否则抛出异常
- @Transactional(propagation=Propagation.NEVER) 必须在一个没有的事务中执行,否则抛出异常(与 Propagation.MANDATORY 相反)
- @Transactional(propagation=Propagation.SUPPORTS) 如果其他 bean 调用这个方法,在其他 bean 中声明事务,那就用事务.如果其他 bean 没有声明事务,那就不用事务
- 事务的总结
- @Transactional 注解要好于自定义 AOP 切面事务,粒度更细,代码更容易阅读。
- 一般默认传播行为 Propagation.REQUIRED 即可满足大部分情况。
- @Transactional 最好不要加到类上,加到方法上更明确。
- @Transactional 最好指定 rollbackFor,否则时刻即的 throw 的是否 RuntimeException。
- 明确业务是否需要加事务。select、根据 id 的单一 update 是不需要事务的。
- 不要在**@Transactional**中进行大量耗时的操作。
Swagger
config(配置层)
@Bean
@Bean是一个方法级别上的注解,主要用在@Configuration注解的类里,也可以用在@Component注解的类里。添加的bean的id为方法名
下面是@Configuration里的一个例子
@Configuration
public class AppConfig {
@Bean
public TransferService transferService() {
return new TransferServiceImpl();
}
}
这个配置就等同于之前在xml里的配置
<beans>
<bean id="transferService" class="com.acme.TransferServiceImpl"/>
</beans>
-
参数
- value :用来修改被标注bean在IOC容器中的id属性。
- name : 用来修改被标注bean在IOC容器中的id属性。
- initMethod :指定初始化方法
- destroyMethod:指定销毁的方法 PS:相当于xml文件中 init-method &destroy-method属性
-
实例
<bean id="car" class="com.rayli.beans.Car" init-method="init" destroy-method="destory"></bean>
@Configuration public class ConfigTest1 { /** * initMethod:在对象被创建,属性赋值完毕后,调用初始化方法 * 1.单例的bean,在IOC容器在被创建的时候就会被创建,所以init方法也会马上被调用 * 2.非单例的bean,只有在被调用的时候才创建,所以那时才被代用init方法。 * destroyMethod:在对象被销毁之前被调用。 */ @Bean(initMethod="init",destroyMethod="destory") public Car car() { return new Car(); } }
@Configuration
- @Configuration是Spring的注解
- @Configuration注解的作用:声明一个类为配置类,用于取代bean.xml配置文件注册bean对象。
@EnableSwagger2WebMvc
import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc;
作用:
- 扫描包将其加入IOC容
- 在Web场景下生效
- 搭配@Configuration
controller(控制层)
@Api
-
@Api是Swagger的注解
-
作用:该注解用于Controller类上,表示对类的说明
-
参数:
- tags=“说明该类的作用,可以在前台界面上看到的注解”
- value=“该参数无意义,在UI界面上看不到,不需要配置”
-
@Api(value = "文章标签") public class TagsController { ... }
@ApiOperation
-
@ApiOperation是Swagger包中的一种注解
-
作用:@ApiOperation 和@ApiParam是用来构建Api 文档的
-
参数:
属性名 | 属性类型 | 默认值 | 作用 |
---|---|---|---|
value() | String | 空 | 接口说明 |
tags() | String[] | 空 | 该接口属于什么分组(可以是单个,也可以是多个) |
notes() | String | 空 | 接口的详细说明 |
httpMethod() | String | 空 | 接口请求方式 |
prodeces() | String | 空 | 接口请求头类型 (输出) |
nickname() | String | 空 | 接口别名 |
protocols() | String | 空 | 网络请求协议(http、https等) |
hidden() | boolean | false | 控制接口在Swagger界面中的显隐性 |
code() | int | 200 | 接口状态码(一般不用设置,Swagger会自动生成接口返回状态) |
response() | Class<?> | 空 | 接口返回类型 |
responseContainer() | String | 空 | 接口返回数据类型 |
responseReference() | String | 空 | 接口返回引用类型 |
consumes() | String | 空 | 接口请求头类型 (输入) |
@ApiOperation(value = "验证 @ApiOperation 注解",
notes = "验证 @ApiOperation 注解 value 和 notes 属性的用法",
httpMethod = "POST")
@RequestMapping("/demo1")
public void demo1() {
//...
}\
未整理
注解 | 用途 |
---|---|
@Param | |
@Controller Advice |
@SpringBootConfiguration
代表这个类就是一个配置类 , 本质上就是一个
@Configuration
注解
@ComponentScan
组件扫描, 默认扫描启动类所在包及子包下的类身上的注解
@EnableAutoConfiguration
自动配置注解 , 添加了此注解会自动去读取
spring.factories
配置文件中的自动配置类
@ConditionalXxxx`
条件筛选,所谓条件化选择就是如果满足条件, 该配置类就生效, 如果不满足该配置类就不生效
常用的条件化选择注解如下 :
注解 作用 > @ConditionalOnBean 如果存在某个Bean, 配置类生效 > @ConditionalOnMissingBean 如果不存在某个Bean, 配置类生效 > @ConditionalOnClass 如果存在某个类, 配置类生效 > @ConditionalOnMissingClass 如果不存在某个类, 配置类生效 @ConditionalOnProperty 如果存在某个属性配置, 配置类生效 @ConditionalOnWebApplication 如果是一个web应用, 配置类生效 @ConditionalOnNotWebApplication 如果不是一个web应用, 配置类生效