Servlet常用注解:
@WebServlet:注册servlet
编写好Servlet之后,接下来需要要告诉Web容器有关于这个Servlet的一些信息。
在Servlet 3.0中,可以使用标注(Annotation)来告知容器哪些Servlet会提供服务以及额外信息。
也就是说:web.xml中对Servlet配置,同样可以在 @WebServlet 注解中配置.
xml 格式的配置:
MyBatis常用注解:
- @Param是MyBatis所提供的(org.apache.ibatis.annotations.Param),
- 作为Dao层的注解,作用是用于传递参数,从而可以与SQL中的的字段名相对应,一般在2=<参数数<=5时使用最佳。
- @Param是地处Dao层,是为了传递多个参数,解决的是可读性和直观性;
Mybatis-Plus常用注解:
@TableName
注解在类上,指定类和数据库表的映射关系。实体类的类名(转成小写后)和数据库表名相同时,可以不指定该注解。
@TableId
注解在实体类的某一字段上,表示这个字段对应数据库表的主键。
在插入数据的时候如果不指定id的数据,mp会自动进行填充数据(雪花算法)
@TableField
注解在某一字段上,指定Java实体类的字段和数据库表的列的映射关系。这个注解有如下几个应用场景。
数据库表跟实体类属性不对应:比如数据库中是"name",实体类中是private String username,就需要通过指定数据库中的字段名称
排除非表字段:若Java实体类中某个字段,不对应表中的任何列,它只是用于保存一些额外的,或组装后的数据,则可以设置exist
属性为false
,这样在对实体对象进行插入时,会忽略这个字段。
排除非表字段也可以通过其他方式完成,如使用static
或transient
关键字
不查询指定字段属性:在我们查询数据的时候有时候并不想查询显示某一列的数据,就可以设置select属性为false @TableField(select = false)
字段验证策略通过insertStrategy
,updateStrategy
,whereStrategy
属性进行配置,可以控制在实体对象进行插入,更新,或作为WHERE条件时,对象中的字段要如何组装到SQL语句中。
字段填充策略:在表中做数据库的更新和插入字段的时候填充数据,只需要实体类中指定file属性
步骤1、在实体类添加注解
步骤2、自定义实现类 MyMetaObjectHandler:https://mp.baomidou.com/guide/auto-fill-metainfo.htmlhttps://mp.baomidou.com/guide/auto-fill-metainfo.htmlhttps://mp.baomidou.com/guide/auto-fill-metainfo.html
@Version
乐观锁注解
@EnumValue
注解在枚举字段上
@TableLogic
逻辑删除
作用在实体类的属性上面,表示逻辑删除,指的是不会真正的从数据库中删除记录,而是将deleted(逻辑删除)字段更新为1
*:逻辑删除实质上是执行update语句
KeySequence
序列主键策略(oracle
)
InterceptorIgnore
插件过滤规则
Lombok常用注解:
1、要在idea中添加lombok插件
2、配置lombok的Maven依赖
@Data :设置set/get等方法
@AllArgsConstructor:有参构造
@NoArgsConstructor:无参构造
Spring常用注解:
xml跟注解在开发中的区别:
xm|与注解: 。xml更加万能,适用于任何场合!维护简单方便 。注解不是自己类使用不了,维护相对复杂! xml与注解最佳实践: 。xml用来管理bean; 。注解常用于负责完成属性的注入; 。我们在使用的过程中,只需要注意一个问题:必须让注解生效,就需要开启注解的支持
首先在xml文件中导入约束(以及注解的支持):
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">
<!--注解的支持-->
<context:annotation-config/>
<!--扫描包,说明在这个包下的注解会被识别-->
<context:component-scan base-package="com.zhixi"/>
</beans>
@Component:注册bean
放在类上面,表示一个组件,说明这个类被spring管理了、 等价于:<bean id="user" class="com.zhixi.pojo.类名"/>
属性:value 就是对象的名称,也就是bean的id值value的值是唯一的
@Component(value = "user") 如果不指定value属性就表示类名首字母小写:User-->user
组件扫描器的声明需要在spring框架的核心配置文件来注册
1 |
|
@PathVariable
映射 URL 绑定的占位符 带占位符的URL
@Value:给基本类型属性赋值
1 2 3 4 5 6 7 8 |
|
给基本类型属性赋值,也可以放在属性的setter方法上,是一样的
1 2 3 |
|
扩展:使用${xxx}给属性赋值:
1 2 3 4 5 6 7 8 9 10 11 |
|
@AutoWired :给引用类型属性赋值(默认是byType注入方式)
1、spring 框架提供的注解,实现引用类型的赋值。
2、spring中通过注解给引用类型赋值,使用的是自动注入原理, 支持byName,byType
3、放在属性上,自动装配名字、类型。也可以加到setter方法上[常用]
1 2 |
|
@Qualifier:配合@AutoWired使用(使用的是byName方式的注入)
1、如果@Autowired自动装配的环境比较复杂【比如多个bean对象】,自动装配无法通过一个注解[@Autowired] 完成、
2、我们可以使用@Qualifier(value="xx")配合@Autowired使用,指定一个唯一 的bean对象注入!
1 2 3 |
|
@Resouece:给引用类型属性赋值
1、来自Jdk的注解,resource默认通过byname的方式实现
2、如果找不到名字,则通过byType实现! 如果两个都找不到的情况下,就报错! [常用]
3、也可以指定bean的id-->byName方式:@Resource(name = "dog2")
@ComponentScan :扫描包
-该注解默认会扫描该类所在的包下所有的配置类,相当于之前的 <context:component-scan>
-或者是@ComponentScan("com.zhixi.pojo") 扫描指定的包、等同于:<context:component-scan base-package="com.zhixi.pojo"/>
@Scope:指定作用域
表示类的作用域,默认是 prototype【原型】,也可以指定作用域:
@Scope("prototype") /*等价于:<bean scope="prototype"/>*/
===================================AOP================================
切面的执行时间,这个执行时间在规范中叫做Advice(邇知,增强),在aspectj框架中使用注解表示的。也何以使用xm1配置文件中的标签
@Aspect:标注切面
作用在类上面,标注这个类是一个切面
@Before():在切面前执行什么方法
@After():在切面后执行什么方法
@Before("execution(* com.zhixi.service.*.*(..))") 切入点表达式: 解释如下: 符号 含义 execution() 表达式的主体; 第一个”*“符号 表示返回值的类型任意; com.zhixi.service AOP所切的服务的包名,即,我们的业务部分 包名后面的”..“ 表示当前包及子包 第二个”*“ 表示类名,*即所有类。 (..) 表示任何方法名,括号表示参数,两个点表示任何参数类型
@AfterReturning
@Around
@AfterThrowing
具体查看博客:AOP编程
SpringMVC常用注解:
@Controller:控制器
作用在类上。用于声明Spring发类的实例是一个控制器
@RequestMapper:请求映射
相当于servlet中xml配置的<servlet-mapper>
@RequestMapping注解用于映射urI到控制器类或个特定的处 理程序方法。可用于类或方法上。
用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
1 // 请求映射,通过/some来访问到:WEB-INF/jsp/hello.jsp 2 @RequestMapping("/some") 3 public String getName(Model model){ 4 // 封装数据 5 model.addAttribute("msg","hello annocation SpringMVC"); 6 // 返回视图的名字,会被视图解析器处理 7 return "hello"; 8 } 参数produces解决请求乱码问题: produces = "text/plain;charset=utf- 8"
1 2 |
|
@PathVariable:路径变量
作用在形参上面,用于表示这个参数是一个RestFull风格的URL
参考博客 :RestFull风格
@RequestParam:将请求参数绑定到你控制器的方法参数上(是springmvc中接收普通参数的注解)
语法:@RequestParam(value=”参数名”)
举例:
<form action="/encoding" method="get"> <div><input type="text" name="username"></div> <div><input type="submit" value="提交"></div> </form>
@Controller public class EncodingDemo { @RequestMapping(value = "/encoding", method = RequestMethod.GET) public String encoding(@RequestParam("username") String name, Model model) { System.out.println(name); model.addAttribute("msg", name); return "encoding"; } }
如果在controller中获取前台页面请求参数的name,跟形参的名字不一致就会出现404、因为它找的是username,而形参中是String name
所以要通过@RequestParam在Controller中进行指定。
@RestController: 不会走视图解析器
@Controller :会走视图解析器
@RestController:不会走视图解析器,会返回一个字符串
@Controller跟@RestController的区别:10、@Controller跟@RestController注解的使用 - Java小白的搬砖路 - 博客园
JSON常用注解:
使用前先导入Maven依赖
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.10.2</version>
</dependency>
@RestController: 作用在类上,表示程序不会走视图解析器
@Controller :会走视图解析器
@RestController:不会走视图解析器,会返回一个字符串
@ResponseBody
标注在方法上面表示不会走视图解析器,会直接返回一个字符串到页面
@RestController 注解相当于 @ResponseBody + @Controller 结合在一起的作用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
SpringBoot常用注解:
@ServletComponentScan
在SpringBootApplication上使用@ServletComponentScan注解后,Servlet、Filter、Listener可以直接通过@WebServlet、@WebFilter、@WebListener注解自动注册,无需其他代码。
配置文件使用的:参考官方文档
@Configuration:说明这是一个配置文件/配置类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
@Configuration的参数:proxyBeanMethods
@Configuration( proxyBeanMethods = false)
1 2 3 |
|
简单来说就是如果:
配置的组件之间有依赖关系,就配置成true(会加载变慢)
没有需要进行依赖的的组件,就可以配置成false(使用的时候再创建,提高新能~)
@ImportResource:用于导入Spring的配置文件,让配置文件里面的内容生效
Spring Boot里面没有Spring的配置文件,我们自己编写的配置文件,不能自动识别;
想让Spring的配置文件生效,加载进来; @ImportResource 标注在一个配置类上。
如果将 @importResources 注释掉,那么helloKitty这个组件就不会注册到IOC容器中!
@PropertySource
// 绑定.properties配置文件
@PropertySource(value = "classpath:application.properties")
配合 @Value 注解给属性赋值
@ConfigurationProperties
配置@Component注解使用,表示这是一个组件,才能够使用SpringBoot的功能。
// 作用在类上,常用于yaml配置文件,给属性赋值
@ConfigurationProperties(prefix = "yaml配置文件属性名")
@Conditional:按需加载组件
可以参考博客:Spring Boot @Condition 注解,组合条件你知道吗
//作用在类上,spring的底层注解,根据不同条件判断配置或类是否生效!
@ConditionalOnWebApplication(type = ConditionalOnWebApplication. Type . SERVLET)
@Enablexxx:开启某个功能
@EnableWebSecurity :开启WebSecurity模式
@EnableConfigurationProperties :自动配置属性--> @EnableConfigurationProperties(HttpProperties. class)
@EnableSwagger2 :开启swagger,参考博客:9、Swagger - Java小白的搬砖路 - 博客园
@EnableAsync :在程序的主入口类中添加,表示开启异步任务
@ControllerAdvice:表示这是个增强类(底层是@Component,一个组件)
@ExceptionHandler ({ArithmeticException.class,NullPointerException.class}):作用在方法上面,处理什么异常信息
Swagger常用注解:
swagger的使用参考博客:9、Swagger - Java小白的搬砖路 - 博客园
controller中:
@Api(tags = "请求控制类") // 给controller类加注释
@ApiOperation("用户赋值请求") //给controller请求加注释
pojo实体类中:
@ApiModel("用户类") // 标注类的信息
@ApiModelProperty("用户名") // 标注属性信息
异步任务
@Async :在Service的类中或者方法中使用,表示这是一个异步的类或者方法
@EnableAsync:在程序的主入口类中添加,表示开启异步任务
SpringCloud用到的注解:
@Accessors:链式注解
@Accessors(chain = true):开启链式编程
比如给属性字段赋值:dept.setD_no(1).setD_name("市场部").setD_source("db01");
@LoadBalanced:负载均衡
添加到要使用的bean上面:@LoadBalanced //配置负载均衡实现RestTemplate
@EnableEurekaClient:开启eureka客户端
通常使用在主启动类上
============熔断:Hystrix===============
@HystrixCommand:熔断后备方法
作用在方法上面,比如这个方法不会返回有效的数据抛出异常,就会去执行这个方法上面:HystrixCommand指定的方法
1 2 |
|
@EnableCircuitBreaker:启用断路器
作用在主启动类上
============熔断:Hystrix===============
SpringBoot项目开发用到的配置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
provider:服务提供者配置:
server:
port: 8003
# mybatis配置
mybatis:
type-aliases-package: com.zhixi.pojo
config-location: classpath:mybatis/mybatis-config.xml
mapper-locations: classpath:mybatis/mapper/*.xml
# spring配置
spring:
application:
name: springcloud-provider-dept # 三个服务名称一致
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: org.gjt.mm.mysql.Driver
url: jdbc:mysql://localhost:3306/db03?userSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
username: root
password: zhixi158
# Eureka配置:配置服务注册中心地址
eureka:
client:
service-url:
defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
instance:
instance-id: springcloud-provider-dept-8003 #修改Eureka上的默认描述信息
# info配置
info:
# 项目的名称
app.name: zhixi-springcloud
# 公司的名称
company.name: com.zhixi.study