Servlet常用注解:
@WebServlet:注冊servlet
編寫好Servlet之后,接下來需要要告訴Web容器有關於這個Servlet的一些信息。
在Servlet 3.0中,可以使用標注(Annotation)來告知容器哪些Servlet會提供服務以及額外信息。
也就是說:web.xml中對Servlet配置,同樣可以在 @WebServlet 注解中配置.
下面使用xml與注解進行一個比對:
Mybatis常用注解:
@Param :傳遞參數
- @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.html
@Version
樂觀鎖注解
@EnumValue
注解在枚舉字段上
@TableLogic
邏輯刪除
作用在實體類的屬性上面,表示邏輯刪除,指的是不會真正的從數據庫中刪除記錄,而是將deleted(邏輯刪除)字段更新為1
*:邏輯刪除實質上是執行update語句
KeySequence
序列主鍵策略(oracle
)
InterceptorIgnore
插件過濾規則
Lombok常用注解:
1、要在idea中添加lombok插件
2、配置lombok的Maven依賴

<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.12</version> </dependency>
@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
@Component有幾個衍生注解,我們在web開發中,會按照mvc三層架構分層! 。dao (持久層)[@Repository] 放在dao的實現類上面,表示創建dao對象, dao對象是能訪問數據庫的。 。service (業務層)[@Service] 放在service的實現類上面,創建service對象, service對象是做業務處理,比如處理事務等功能的、 。controller (控制器層)[@Controller] 控制器對象,能夠接受用戶提交的參數,顯示請求的處理結果。 這四個注解功能都是一 樣的,都是代表將某個類注冊到Spring中, 裝配Bean
組件掃描器的聲明需要在spring框架的核心配置文件來注冊
<context:component-scan base-package="指定Spring容器需要掃描的類所在包"/>
@PathVariable
映射 URL 綁定的占位符 帶占位符的URL
@Value:給基本類型屬性賦值
1.作用:為對象中基本類型屬性進行賦值 類似於XML標簽中<property name="基本屬性名" value="賦值內容"/> 2.使用: @Value可以修飾在屬性上方,此時這個屬性不需要聲明set方法 @Value可以修飾在set方法上方 3.注意: @Value出現類必須使用@Componet進行修飾
給基本類型屬性賦值,也可以放在屬性的setter方法上,是一樣的
@Value("張三") /*等價於:<property name = "name" value = "張三"/>*/ private String name = "張志喜";
擴展:使用${xxx}給屬性賦值:
1、xxx.properties name=張三 age=23 2、xml中加載屬性配置文件 <context:property-placeholder location="classpath:students.properties" file-encoding="gb2312"/> 3、使用@Value注解 @Value("${name}") private String name; @Value("${age}") private int age;
@AutoWired :給引用類型屬性賦值(默認是byType注入方式)
1、spring 框架提供的注解,實現引用類型的賦值。
2、spring中通過注解給引用類型賦值,使用的是自動注入原理, 支持byName,byType
3、放在屬性上,自動裝配名字、類型。也可以加到setter方法上[常用]
@Autowired private School school;
@Qualifier:配合@AutoWired使用(使用的是byName方式的注入)
1、如果@Autowired自動裝配的環境比較復雜【比如多個bean對象】,自動裝配無法通過一個注解[@Autowired] 完成、
2、我們可以使用@Qualifier(value="xx")配合@Autowired使用,指定一個唯一 的bean對象注入!
@Autowired // 表示自動注入 @Qualifier("mySchool") //表示找名字 private School school;
@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編程
===================================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"
默認使用“text/plain;charset= ISO- 8859- 1f作為contentType,導致中文有亂碼, 解決方案:給Reques tMapping增加一個屬性produces, 使用這個屬性指定新的content Type
@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的區別:https://www.cnblogs.com/zhangzhixi/p/14316924.html
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 結合在一起的作用
@Controller public class JsonDemo { /** * @author zhangzhixi */ @RequestMapping(value = "/json") @ResponseBody // 表示不會走視圖解析器,會直接返回一個字符串到頁面 public String json1() throws JsonProcessingException { ObjectMapper mapper = new ObjectMapper(); // 創建一個對象 User user = new User("張志喜", 21, "男"); // 將值寫為字符串[將對象轉為JSON格式字符串] String str = mapper.writeValueAsString(user); return str; } }
參考:https://www.cnblogs.com/shuaifing/p/8119664.html
SpringBoot常用注解:
配置文件使用的:參考博客
@Configuration
//作用在類上面表示這是一個配置類
@Configuration( proxyBeanMethods = false)
@PropertySource
// 綁定.properties配置文件
@PropertySource(value = "classpath:application.properties")
配合 @Value 注解給實體類屬性賦值
@ConfigurationProperties
// 作用在類上,常用於yaml配置文件,給屬性賦值
@ConfigurationProperties(prefix = "yarl配置文件屬性名")
@ConditionalOnWebApplication
//作用在類上,spring的底層注解,根據不同條件判斷配置或類是否生效!
@ConditionalOnWebApplication(type = ConditionalOnWebApplication. Type . SERVLET)
@Enablexxx:開啟某個功能
@EnableWebSecurity :開啟WebSecurity模式
@EnableConfigurationProperties :自動配置屬性--> @EnableConfigurationProperties(HttpProperties. class)
@EnableSwagger2 :開啟swagger,參考博客:https://www.cnblogs.com/zhangzhixi/p/14348822.html
@EnableAsync :在程序的主入口類中添加,表示開啟異步任務
@ControllerAdvice:表示這是個增強類(底層是@Component,一個組件)
@ExceptionHandler ({ArithmeticException.class,NullPointerException.class}):作用在方法上面,處理什么異常信息
看下處理異常的設置:

1 package com.zhixi.exception; 2 3 import lombok.extern.slf4j.Slf4j; 4 import org.springframework.web.bind.annotation.ControllerAdvice; 5 import org.springframework.web.bind.annotation.ExceptionHandler; 6 7 /** 8 * @author zhangzhixi 9 * @date 2021/3/31 16:50 10 * 處理MVC的全局異常 11 */ 12 13 @Slf4j 14 @ControllerAdvice // 實際上是一個組件,被增強 15 public class HandlingGlobalExceptions { 16 /** 17 * 在請求中有可能不止一個出現錯誤,我們寫個方法用來處理錯誤 18 * 處理數學錯誤 19 */ 20 @ExceptionHandler({ArithmeticException.class, NullPointerException.class}) 21 public String handlerArithmeticException(Exception exc) { 22 log.error("捕獲到的異常是:", exc); 23 // 視圖地址(如果發生了數學運算異常,跟空指針異常,就會跳轉到視圖地址) 24 return "login"; 25 } 26 }
Swagger常用注解:
swagger的使用參考博客:https://www.cnblogs.com/zhangzhixi/p/14348822.html
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指定的方法
// 添加熔斷的后備方法 @HystrixCommand(fallbackMethod = "hystrixGetDeptById")
@EnableCircuitBreaker:啟用斷路器
作用在主啟動類上
============熔斷:Hystrix===============
SpringBoot項目開發用到的配置:
# 關閉緩存 spring.thymeleaf.cache=false # 項目虛擬目錄,通過localhost/8080/zhixi訪問首頁 server.servlet.context-path=/zhixi # 指定國際化配置文件的真實位置 spring.messages.basename=iI18n.login
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