Spring框架的注解
@PostMapping("/getDetails")???post請求 ??映射到接口 ??????????????@RequestBody ?? 用來接收HTTP請求體中參數
@GetMapping("/getDetails") ????get請求 ??映射到接口 ??????????????@RequestParam ? 用來接收URL中的查詢參數
@PutMapping
@DeleteMapping
@Api(tags = "部門****") ??用于對整個控制器類進行說明,可通過tags屬性來描述該控制器的功能,方便在Swagger文檔中進行分類顯示。
@RestController???????????這表示這是一個RESTful風格的Controller 會自動將返回的數據 轉換為JSON格式??是Spring Framework 中用于標識 RESTful Web 服務的控制器(Controller)的注解之一
@RequestMapping(/system/**) ?用于映射接口的根路徑 ? ?例:http://127.0.0.1:8009/test/getDetails
@Resource ???????????????用于注入依賴實例
@ApiOperation ???????????用于對接口方法 進行說明 可通過value屬性來描述該方法的功能 方便在Swagger文檔中進行分類顯示。
@Tag(name = "部門****") ?
@Operation(summary = "獲取用戶列表")??這倆個也是api文檔注解
@PathVariable???是 Spring MVC 中用于從 URI 模板中提取變量值的注解。當你的請求路徑 中包含占位符(例如 /users/{userId}),你可以使用 @PathVariable 注解 將占位符中的值映射到方法的參數上
@GetMapping("/users/{userId}")
public ResponseEntity<User> getUserById(@PathVariable Long userId) {// 方法體
}
@Validated?????Spring Framework 中用于開啟方法級別的參數驗證的注解
@PostMapping("/createUser")
public ResponseEntity<String> createUser(@Validated @RequestBody User user) {
}
@Validated 注解用于開啟方法級別的參數驗證,而 @RequestBody 注解用于將請求體中的數據映射到 User 對象
在User類中的??@NotNull??@Email??@Size(min = 5, max = 10).....
對這些參數設置的限制信息進行校驗
@Autowired???是 Spring Framework 中用于進行依賴注入的注解。它可以被用于字段、構 造函數、Setter 方法等地方,用于告訴 Spring 容器將相應類型的 Bean 注 入到被注解的元素中
@Log(title = "部門管理", businessType = BusinessType.UPDATE)
自定義的日志記錄注解?用于記錄系統中不同操作的日志信息
title 屬性可能用于指定日志的標題或名稱,用于區分不同類型操作的日志記錄
businessType 屬性可能表示業務類型或操作類型,用于記錄操作的種類(delete,update...)
@Log(title = "部門管理", businessType = BusinessType.DELETE)
@RequiresPermissions?注解是 Apache Shiro 框架中用于進行權限控制的注解
@RequiresPermissions("user:create") 表示 createUser?方法需要用戶具有 "user:create"?權限才能被執行。如果當前用戶沒有這個權限,將會拋出 UnauthorizedException?異常
????
@PreAuthorize?是 Spring Security 框架中用于進行方法級別的訪問控制的注解之一
@ss.hasPermi('system:user:remove') 中的 @ss.hasPermi?可能是一個自定義的方法,用于檢查用戶是否有指定的權限
@Service????是 Spring Framework 中的注解之一,用于標識一個類作為服務層組件
Spring 框架將被注解的類納入 Spring 容器的管理,從而可以在應用程序的其他部分(如控制器、其他服務類等)中通過依賴注入來使用該服務。
@Override?????是 Java 中的注解,用于告訴編譯器,被注解的方法是重寫(覆蓋)了父類 (或接口)中的方法?如果使用了 @Override 注解但實際上沒有覆蓋父類的方 法,編譯器就會報錯(在impl 接口實現層)
@Transactional???是 Spring Framework 中用于聲明事務行為的注解。它可以應用于類級別或方法級別,表示被注解的方法或類將被包裝在一個事務中
@Mapper?????在 MyBatis 中,@Mapper 注解用于標識一個 Java 接口是 MyBatis 的映射 ?器。使用 @Mapper 注解告訴 MyBatis 掃描這個接口,并為它創建一個代 理對象,從而可以在代碼中調用這些方法來執行數據庫操作 主要用于 MyBatis 的映射器接口
@Repository??用于標識一個類是數據訪問對象(DAO)。它通常與持久層的實現類一起使 用,用于將數據訪問異常(例如 DataAccessException)轉換為 Spring 的數據 訪問異常體系。@Repository 注解還啟用了 Spring 的異常轉換機制,將數據 庫操作中的異常轉換為 Spring 的數據訪問異常,使得上層調用者可以更容易 地處理異常 用于 Spring 的數據訪問對象
mapper文件中 MyBatis 中用于配置 SQL 映射的注解
@Select????注解用于映射一個查詢操作,可以標注在接口的方法上或者是 XML 映射文件 的 <select> 元素上。它指定了要執行的 SQL 查詢語句
@Insert @Delete @Update?..... ?如上
@Results?和?@Result
注解一起使用,用于定義查詢結果的映射關系。@Results 注解標注在接口的方法上或者是 XML 映射文件的 <resultMap> 元素上,表示一個結果集映射。而 @Result 注解則用于指定一個屬性和數據庫字段之間的映射關系
@One?和?@Many
注解用于處理一對一和一對多的關聯關系。它們通常與 @Result 注解一起使用,以指定不同實體之間的映射關系
@Param?????是 MyBatis 中用于指定傳遞給 SQL 查詢的參數的注解。它主要用于將方法參 數與 SQL 查詢中的參數進行映射
@Options???用于配置一些可選的屬性,例如主鍵自動生成策略
@Insert("INSERT INTO users (username, password) VALUES (#{username}, #{password})")
@Options(useGeneratedKeys = true, keyProperty = "id")
void insertUser(User user);
@SelectKey:用于配置查詢操作后獲取生成的主鍵。
@Insert("INSERT INTO users (username, password) VALUES (#{username}, #{password})")
@SelectKey(statement = "SELECT LAST_INSERT_ID()", keyProperty = "id", before = false, resultType = Long.class)
void insertUserAndGetId(User user);
MyBatis 框架中的 XML 映射文件
sql.xml 文件
resultMap?標簽
這段 XML 代碼定義了一個名為 "SysUserResult" 的結果映射(resultMap),用于將數據庫查詢結果映射到 Java 對象 SysUser 中。
<resultMap type="SysUser" id="SysUserResult">: 這行代碼表示正在創建一個結果映射,指定了它的類型是 SysUser,并且賦予了它一個 ID 名稱為 "SysUserResult",以便在后續的 SQL 映射中引用。
<id property="userId" column="user_id" />: 這個部分將數據庫表中的 "user_id" 列映射到 SysUser 對象的 userId 屬性。這個屬性通常代表對象的主鍵。
<result property="deptId" column="dept_id" />: 類似地,將數據庫中的 "dept_id" 列映射到 SysUser 對象的 deptId 屬性。
<association property="dept" javaType="SysDept" resultMap="deptResult" />: 這是一個復雜類型的映射,它將 SysUser 對象中的 dept 屬性映射到另一個復雜類型對象 SysDept。這意味著在查詢 SysUser 對象時,可以將相關的 SysDept 對象作為屬性關聯起來。deptResult 是另一個 resultMap 的引用,用于映射 SysDept 對象的屬性。
<collection property="roles" javaType="java.util.List" resultMap="RoleResult" />: 這個部分定義了一個集合屬性 roles,它是 SysUser 對象的一個屬性,表示一個用戶可能有多個角色。這個集合的類型是 java.util.List,并且它的元素類型是 RoleResult resultMap 所定義的類型。這允許將查詢到的多個角色映射為一個角色列表。
總的來說,這個 <resultMap> 定義了如何將數據庫查詢的列映射到 SysUser 對象及其關聯對象(SysDept 和角色列表)的屬性上,為 MyBatis 提供了一個詳細的映射配置。
<sql>???標簽通常用于存儲可復用的 SQL 片段,以便在文件中的多個地方重用相同的 SQL 代碼段。通過這種方式,可以提高代碼的可讀性、可維護性和重用性?? ?id 屬性指定了這個 SQL 片段的標識符為 "selectDeptVo"
<select> 元素是用來執行查詢操作的,表示你希望從數據庫中檢索數據。
除此之外 還有 <update> <delete> ......
id="selectDeptById":這是這個查詢語句的唯一標識符。在 MyBatis 中,每個 SQL 查詢語句都必須有一個唯一的標識符,以便在 Java 代碼中引用它。
parameterType="Long":這指定了查詢語句的輸入參數類型。在這種情況下,這個查詢期望一個類型為 Long 的參數。這通常用于傳遞查詢所需的條件,例如通過部門的ID來查詢相關信息。
resultMap="SysDeptResult":這指定了查詢結果的映射規則。在 MyBatis 中,可以使用 <resultMap> 元素定義如何將數據庫查詢結果映射到 Java 對象。SysDeptResult 可能是一個預先定義的結果映射,規定了如何將數據庫中的字段映射到 Java 對象的屬性。
@ApiImplicitParams??是一個包含多個@ApiImplicitParam的容器
@ApiImplicitParam???用于具體描述每個參數 通過"name"指定名 "value"來描述參數的含 義 ?"require" 來標識參數是否必"dataType" 來指定參數的數據類型
@slf4j ??????????進行日志統計
Lombok注解
@Data ????????? ??它可以自動生成類的常用方法,如 toString()、equals()、hashCode()、 getter 和 setter 等方法。使用 @Data 注解可以簡化代碼,并避免手動 編寫這些常用方法
Swagger注解
@ApiModel ?????????用于描述數據模型的信息
@ApiModelProperty??用于描述模型的屬性信息。在這里,我們將 e_id 字段注解為一個屬性,并指定了它的名稱為 "id",描述為 "id",并標記為必需屬性(required = true)
MyBatis框架注解
@Select ??????????用于執行搜索操作的SQL操作
@Update ??????????用于執行更新操作的SQL操作
@Insert ??????????用于執行插入操作的SQL操作
@Delete ?? ??用于執行刪除操作的SQL操作
@SelectProvider???允許使用自定義的 SQL 提供者類來動態生成 SQL 查詢語句
@UpdateProvider ??允許使用自定義的 SQL 提供者類來動態生成 SQL 查詢語句
@InsertProvider ??允許使用自定義的 SQL 提供者類來動態生成 SQL 查詢語句
@Options ?????????提供了一些選項,例如設置主鍵自增等
例子:
?1. ?@Select("SELECT * FROM company WHERE name = #{name}")List<Test> searchByExactName(@Param("name") String name);
?
2. ?@Update("UPDATE company SET name = #{name}, age = #{age}, address = #{address}, salary = #{salary} WHERE id = #{id}")int update(Test test);
@Select:
用于標識一個方法是查詢操作,該方法會執行一個 SQL 查詢語句并返回結果。
@Select 注解中的 value 屬性用于指定要執行的 SQL 查詢語句。
#{name} 是一個參數占位符,表示查詢語句中的一個參數,@Param("name") String name 表示方法的參數名為 name,并將方法中的 name 參數映射到 SQL 查詢語句中的 #{name} 占位符上。
@Update:
用于標識一個方法是更新操作,該方法會執行一個 SQL 更新語句并返回更新影響的行數。
@Update 注解中的 value 屬性用于指定要執行的 SQL 更新語句。
#{name}, #{age}, #{address}, #{salary}, #{id} 都是參數占位符,表示更新語句中的多個參數,這些參數分別對應了 Test 實體類中的字段,而在 update 方法的參數 Test test 中,這些字段會被映射到對應的參數占位符上。
1, @SpringBootApplication
包含@Configuration、@EnableAutoConfiguration、@ComponentScan通常用在主類上;
相關注解 ????????????????????????說明
@ComponentScan ?????????? 用來自動掃描被這些注解標識的類,最終生成ioc容器里的 bean,默認掃描范圍是@ComponentScan注解所在配置類包 及子包的類
@SpringBootConfiguration 與@Configuration作用相同,都是用來聲明當前類是一個配 置類,這里表明是springboot主類使用的配置類
@EnableAutoConfiguration 是springboot實現自動化配置的核心注解,通過這個注解把 spring應用所需的bean注入容器中
- @Component、@Service、@Controller、@Repository?都是將類注入到spring容器中,
@Component,@Service,@Controller,@Repository注解標注的類,這些類會被納入進spring容器中管理。
注解 ??????????說明
@Repository 持久層(dao)注入spring容器
@Service 業務邏輯層(server)注入spring容器
@Controller 控制層(controller)注入spring容器
@Component 普通pojo注入spring容器
3.@ResponseBody可以作用在方法上或類上,表示該方法的返回結果直接寫入 HTTP response body 中,而不會被解析為跳轉路徑,即不會經過視圖解析器,返回什么數據即在頁面輸入什么數據。@ResponseBody的作用其實是將java對象轉為json格式的數據。
4.@RestController
該注解是@Controller和@ResponseBody的結合體,一般用于類,作用等于在類上面添加了@ResponseBody和@Controller
5.@AutoWired、@Qualifier、@Resource
這3個注解都是基于注解方式進行自動裝配,在容器里面將查找到的bean返回,一般@AutoWired用得最多,@Qualifier則需要配合@AutoWired使用,@Resource則是可以通過名字進行自動裝配
5.1
5.2@Qualifier??當有一個接口的多個實現類時,只用@AutoWired會報錯,因為它有多個接口的實現類,不知道你要找哪一個,這個時候就需要在注入bean的時候起個名字,然后用@Qualifier注解指定哪一個bean(按照名字注入與裝配)
接口實現類1,bean注入并起名字
接口實現類2,bean注入并起名字
兩個注解的配合使用實現bean的自動裝配
5.3@Resource???該注解的使用相當于@AutoWired和@Qualifier配合使用的效果
Resource(name="sayHello")
private SayHello sayhello
6.@RequestMapping、@GetMapping、@PostMapping
注解 說明
@RequestMapping @RequestMapping(url),通過該注解就可以通過配置的url進行訪問,方式可以是get或post請求,兩種方式均可
@GetMapping @GetMapping(url) ,功能類似的,只是這個限定了只能是Get請求
@PostMapping @PostMapping(url),功能類似的,只是這個限定了只能是Post請求
- @Value、@ConfigurationProperties、@PropertySource
注解 說明
@Value 用于獲取bean的屬性,一般用于讀取配置文件的數據,作用在變量上
在yml配置文件設置數據變量 ?mag:dev-信息讀取在類內部 ???@Value(${msg}) ?prvite String msg;
@ConfigurationProperties 用于注入Bean屬性,然后再通過當前Bean獲取注入值,作用在類上
在yml配置文件設置數據變量
?student:name:信息age:12
讀取在類外部作用于整個類 ??
?@ConfigurationProperties(prefix="student") ?public class Student{String name;String age; ????//類的字段名必須和配置文件的字段名一致} ???? //!! 要有getter 和 setter 方法才能注入成功
@PropertySource 用于指定要讀取的配置文件,可以和@Value或@ConfigurationProperties配合使用
//PropertySource不支持yml文件讀取 ??
案例配置文件people.properties ==> ????people.name = 灰太狼 people.sex =男 ?@PropertySource(value={ "classpath: people.properties " },encoding="utf-8")@ConfigurationProperties(prefix="people")
8.@Configuration、@Bean
@Configuration作用于類上面,表明這是一個配置類,@Bean產生一個Bean對象加入Spring IOC容器
//一般這兩個注解同時配合使用
注解 說明
@Configuration 作用于類上表示這是一個配置類,可理解為用spring的時候xml里面的< beans>標簽
@Bean 產生bean對象加入容器,作用于方法,可理解為用spring的時候xml里 面的標簽
9.@RequestParam、@RequestBody、@PathVariable、@RequestHeader、@CookieValue
注解 說明
@RequestParam 獲取查詢參數。即url?name=這種形式 ????
@RequestParam主要用于接收url?后面的參數,get或post請求,只要后面的url? 有參數都可以獲取到對應的參數
@RequestParam注解有幾個比較重要的屬性,required 表示是否必須,默認為 true, 必須。defaultValue 可設置請求參數的默認值。value 為接收url的參數名(相當于 key值)。
@PathVariable 獲取路徑參數。即url/{id}這種形式。get獲取post請求均可
@RequestParam 獲取請求體數據(body),get沒有請求體,,一般用于post獲取參數 ?// 果要傳多個參數過去只能將其封裝成一個類,如果是出現了多個@RequestBody 注解訪問的時候會報400錯誤
@RequestHeader 獲取請求頭的信息
例: public String requestBody03(@RequestHeader(name = 'Content-Type') String contentType){return ?contentType;
}
@CookieValue 獲取Cookie的信息例:
@GetMapping("/demo3")public void demo3(@RequestHeader(name = "myHeader") String myHeader,@CookieValue(name = "myCookie") String myCookie) {System.out.println("myHeader=" + myHeader);System.out.println("myCookie=" + myCookie);}