SpringBoot+Mybatis 注解解析

Restful風格下的SpringBoot的注解開發(fā)

電商網(wǎng)站經(jīng)常用到的restful風格,只是一種開發(fā)想法,不是開發(fā)框架,現(xiàn)在的技術并沒有完全實現(xiàn)restful風格。
restful風格是一種架構理念,完美的詮釋了http協(xié)議
restful方式需要配置一套restful風格的前端控制器,用/來標識url-pattern
RequestMapping(value="/ViewItems/{id}" String id) java類里面使用@PathVariable(“id”) 注解進行參數(shù)綁定String id或者綁定java Bean的bean屬性

@SpringBootApplication

Springboot提供了統(tǒng)一的注解@SpringBootApplication來替代這三個注解@Configuration、@EnableAutoConfiguration、@ComponentScan,簡化程序配置

@EnableAutoConfiguration

@EnableAutoConfiguration;能夠自動配置spring的上下文,試圖猜測和配置你想要的bean類,通常會自動根據(jù)你的類路徑和你bean定義自動配置

@ComponentScan

@ComponentScan;會自動掃描指定包下的全部標有@Component的類,并注冊成bean,當然包括@Component下的子注解@Service、@Repository、@Controller。

@Configuration

Configuration標注在類上,相當于把該類作為spring的xml配置文件中的<beans>,作用為:配置spring容器(應用上下文),加載配置xml文件的注解。用@Configuration注解該類,等價于XML中配置beans;用@Bean標注方法等價于XML中配置bean。

@EnableWebMvc

想要以Java形式默認的配置,你可以簡單的實現(xiàn)WebMvcConfigurer接口,或者繼承WebMvcConfigurerAdapter并重寫需要的方法:

@Configuration
class WebMvcConfig ectends WebMvcConfigurerAdapter{
      @Override
      public void addResourceHandlers(ResourceHandlerRegistry registry){
        registry.addResourceHandler("swagger-ui.html").addReesourceLocations("classpath:/META-INF/resources/");
        resistry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
      }
}

@Override

Override是一個marker annotation類型,它被用標注方法。它說明了被標注的方法重載了父類的方法,起到了斷言的作用。如果寫錯,編譯器可以檢測出哪些是錯誤的,這樣能保證你的重寫方法正確。

@Validated(value={})

這個注解指的是分組校驗,與BindingResult配對出現(xiàn),ModelandView的Model對象可以將error的信息返回給界面。

@ModelAttributr("")

注解回顯到request里面的key
處理回顯信息:
不管你輸入什么,正確都提交,錯誤都回顯,同時還可以將返回值返回給界面,最簡單的回顯跟數(shù)據(jù)類型的回顯,直接使用model.addAttribute("allErrors",allErrors);
配置圖片的虛擬目錄跟訪問路徑,tomcat雙擊->model->選擇第二個add ecternal web model

@Autowired

Apring 2.5引入了@Autowired注釋,它可以對類成員變量,方法及構造函數(shù)進行標注,完成自動裝配的工作。通過@Autowired的使用來消除set,get方法。

@RequesMapping("fileUpload")

注解為控制器指定可以處理哪些特定的URL請求。

@ApiOperation和@ApiParam

@ApiOperation(value = "接口說明"),httpMethod = "接口請求方式",response = “接口返回參數(shù)類型”,notes = “接口發(fā)布說明”;其他參數(shù)可參考源碼,不是spring自帶的注解,而是swagger里
com.wordnik.swagger.annotations.ApiOperation;
@ApiParam(required = "是否必須參數(shù)",name = "參數(shù)名稱",value = "參數(shù)具體描述")。

@Api

修飾整個類,描述Controller的作用。

@ApiOperation

描述一個類的一個方法,或者說一個接口。

@ApiModel

用Model對象來接收參數(shù)。

@ApiParam

@ApiParam(value = "token",required = true) @RequestParam String token
Web前端/移動端HTTP請求方式:直接把參數(shù)附帶到URL后面,或者AJAX方法,表單提交。

@ApiProperty

用對象接收參數(shù)時,描述對象的一個字段。

@ApiResponse

HTTP響應其中1個請求以及參數(shù)描述。

@ApiResponses

HTTP響應整體描述。

@ApiModelProperty

對象屬性@ApiModelProperty 用在出入?yún)?shù)對象的字段上。

@RestController

@RestController注解是它繼承自@Controller注解。4.0之前的版本,spring MVC的組件都使用@Controller來標識當前類是一個控制器service。
使用這個特性,我們可以開發(fā)REST服務的時候不需要使用@Controller而專門的@RestController。
注解本身使用@Controller和@ResponseBody。使用了這個注解的類會被看作一個controller使用

@RequestMapping   //的方法自己還有一個默認的@ResponseBody注解
@Api             // 用于controller類上,用于協(xié)議集描述@ApiOperation用在controller的方法上,用于協(xié)議集描述
@ApiResponses  //用在controller的方法上屬于Response集
@ApiResponse  //用在@ApiResponses里邊,屬于Response集
@ApiImplicitParams  //用在controller的方法上,屬于非對象參數(shù)集
@ApiImplicitParam  //用在@ApiImplicitParams的方法里邊,屬于非對象參數(shù)集
@ApiModel  //用在返回對象類上,描述返回對象的意義

@component

把普通pojo實例化到spring容器中,相當于配置文件中<bean id = "" class = "">

@RequesBody

該注解用于讀取Request請求的body部分數(shù)據(jù),使用系統(tǒng)默認配置的HttpMessageConverter進行解析,然后把相應的數(shù)據(jù)綁定到要返回的對象上,再把HttpMessageConverter返回的對象數(shù)據(jù)綁定到controller中方法的參數(shù)上

@Data

注解在類上,為類提供讀寫屬性,此外還提供了equals()、hashCode()、toString()方法

@Builder

注解在類上,為類提供一個內部的Builder

@Synchronized

注解在方法上,為方法提供同步鎖

@Log4j

注解在類上,為類提供一個屬性名為log的log4j的日志對象

@Slf4j

注解在類上,為類提供一個屬性名為log的slf4j的日志對象

@Service

用于標注業(yè)務層組件

@Controller

用于標注控制層組件(如struts中的action)

@Repository

用于標注數(shù)據(jù)訪問組件,即DAO組件

@Component

泛指組件,當組件不好歸檔的時候,我們可以使用這個注解進行標注。

@Autowired

@Qualifier(“chinese”)
當接口存在兩個實體類的時候必須使用@Qualifier指定注入那個實體類,否則可以省略,只寫@Autowired。<mvc:annocation-driven/>注解形式的可以不用配置json轉換器,直接使用@ResponseBodey注解,可以設置json跟Bean直接按的轉換:該注解用于將Controller的方法返回的對象,通過適當?shù)腍ttpMessageConverter轉換為指定格式后,寫入到Response對象body數(shù)據(jù)區(qū)。

@ModelAttribute

在方法定義上使用@ModelAttribute
注解:Spring MVC在調用目標處理方法前,會逐個調用在方法級上標注了
@ModelAttribute的方法,在方法的入?yún)⑶罢{用
@ModelAttribute注解:可以從隱含對象中獲取隱含的模型數(shù)據(jù)中獲取對象,再將請求參數(shù)綁定到對象中,再傳入入?yún)⒎椒ㄈ雲(yún)ο筇砑拥侥P椭小?/p>

@RequesParam

在處理方法入?yún)⑻幨褂聾RequestParam可以把請求參數(shù)傳遞給請求方法

@PathVariable

綁定URL占位符到入?yún)?/p>

@ExceptionHandler

注解到方法上,出現(xiàn)異常時會執(zhí)行該方法

@ControllerAdvice

使一個Contoller成為全局的異常處理類,類中用@ExceptionHandler方法注解的方法可以處理所有Controller發(fā)生的異常

@ResponseBody

該注解用于將Controller的方法返回的對象,通過適當?shù)腍ttpMessageConverter轉換為指定格式后,寫入到Response對象的body數(shù)據(jù)區(qū)。使用時機:返回的數(shù)據(jù)不是html標簽的頁面,而是其他某種格式的數(shù)據(jù)時(如json、xml)時使用當我們在Controller上標注了@RestController的方法返回的對象通過適當?shù)霓D換器轉換為指定的格式之后,寫入到response對象的body區(qū),通常用來返回JSON數(shù)據(jù)或者時xml數(shù)據(jù)。需要注意的是,在使用此注解之后不會再走試圖處理器,而是直接將數(shù)據(jù)寫入到輸入流中,他的效果等同于通過response對象輸出指定格式的數(shù)據(jù)。

@RequestMapping("/login")
@ResponseBody
public User login(User user){
        return user;
} 
/**
User字段:userName     password
那么在前臺接受的數(shù)據(jù)為:'{"userName":"xxx","password";"xxx"}'
*/

//效果等價于如下代碼:
@RequestMapping(“/login”)
public void login(User user , HttpServiceResponse response){
    response.getWriter.write(JSONObject.fromObject(user).toString());
}
//細節(jié)
/**
Google的一個json的jar包,隨時將對象封裝json返回。
Gson gson = new Gson();
String json = gson.toJson(對象);
*/

@Param

1.使用@Param注解
當以下面的方式進行寫SQL語句時:

    @Select("select column from table where userid = #{userid} ")
    public int selectColumn(int userid);

當你使用了@Param注解來聲明參數(shù)時,如果#{}或${}的方式都可以。

    @Select("select column from table where userid = ${userid} ")
    public int selectColumn(@Param("userid") int userid);

當你不使用@Param注解來聲明參數(shù)時,必須使用使用 #{}方式。如果使用 ${} 的方式,會報錯。

  @Select("select column from table where userid = ${userid} ")
    public int selectColumn(@Param("userid") int userid);

2,不使用@Param注解
不使用@Param注解時,參數(shù)只能有一個,并且是Javabean。在SQL語句里可以引用JavaBean的屬性,而且只能引用JavaBean的屬性

    // 這里id是user的屬性
    @Select("SELECT * from Table where id = ${id}")
    Enchashment selectUserById(User user);
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容