常用注解和SpringBoot項目開發常用注解以及配置


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,這樣在對實體對象進行插入時,會忽略這個字段。

  排除非表字段也可以通過其他方式完成,如使用statictransient關鍵字

不查詢指定字段屬性:在我們查詢數據的時候有時候並不想查詢顯示某一列的數據,就可以設置select屬性為false @TableField(select = false) 

字段驗證策略通過insertStrategyupdateStrategywhereStrategy屬性進行配置,可以控制在實體對象進行插入,更新,或作為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>
View Code

@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

詳見:RestFull風格【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 }
View Code

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM