日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

闭关修炼(九)注解

發(fā)布時(shí)間:2023/12/14 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 闭关修炼(九)注解 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

之前寫(xiě)了一篇有關(guān)于注解的,放一起好了

https://blog.csdn.net/qq_19841133/article/details/108918652


文章目錄

  • 自定義注解
    • 什么是注解
    • 注解的好處
    • 注解分類(lèi)
    • 如何自定義注解?
      • 例子
  • 乞丐版ORM框架映射
    • 什么是ORM
    • 實(shí)現(xiàn)思路
    • 實(shí)現(xiàn)
  • 乞丐版JPA和Junit實(shí)現(xiàn)


自定義注解

什么是注解

1.5新增技術(shù)。
目的是簡(jiǎn)化代碼。
在springboot中幾乎是面向注解開(kāi)發(fā)了。

注解的好處

閱讀性高,簡(jiǎn)化代碼,提高開(kāi)發(fā)效率

注解分類(lèi)

  • 內(nèi)置注解,jdk自帶的注解,如@Override重寫(xiě)注解(重寫(xiě)的注解的作用是標(biāo)識(shí)是否正確,必須是重寫(xiě)的方法才能進(jìn)行注解,不然會(huì)報(bào)錯(cuò),起到一個(gè)驗(yàn)證的作用。),內(nèi)置注解還有@Overload,@Deprecated(標(biāo)識(shí)過(guò)時(shí)),@SuppressWarnings(標(biāo)識(shí)編譯去除警告)

  • 自定義注解,框架中使用的較多

  • 第三方框架中的注解

  • 如何自定義注解?

    java基礎(chǔ)知識(shí)點(diǎn)

    interface前加@,@interface標(biāo)識(shí)類(lèi)它是一個(gè)注解類(lèi),本質(zhì)上是一個(gè)接口。

    元注解
    @Target 標(biāo)識(shí)這個(gè)接口能使用的地方,如接口類(lèi),屬性,方法等
    @Retention 注解的保留策略,保留策略有三種SOURCE/ClASS/RUNTIME,要想被反射讀取,保留策略只能用RUNTIME,即運(yùn)行時(shí)仍可讀取

    例子

    寫(xiě)自定義注解一定要注意,先寫(xiě)Target和Retention,養(yǎng)成規(guī)范的好習(xí)慣

    // METHOD方法上使用,TYPE類(lèi)和接口上使用,FIELD屬性上使用 @Target({ElementType.METHOD, ElementType.TYPE,ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) @interface TestAnnotation{int beanId() default 0;String className() default "";String[] array(); }public class Test1 {@TestAnnotation(beanId = 1, className = "ch9.Test1",array = {"78999"})public void add(){} }

    乞丐版ORM框架映射

    什么是ORM

    對(duì)象關(guān)系映射。如MySQL數(shù)據(jù)庫(kù)中有一個(gè)屬性名為student_id,映射到j(luò)ava中可能就是studentId

    實(shí)現(xiàn)思路

    使用java反射機(jī)制獲取每個(gè)屬性上的注解的value值,再拼接成sql語(yǔ)句

    實(shí)現(xiàn)

    乞丐版select語(yǔ)句ORM實(shí)現(xiàn)

    package ch9;import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import java.lang.reflect.Field;/*** 表的關(guān)聯(lián)注解** @author uuz* @date 2021/01/09*/ @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) @interface Table {String value(); }/*** 字段映射** @author uuz* @date 2021/01/09*/ @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) @interface Property {String name();int length() default 0;}@Data @AllArgsConstructor @NoArgsConstructor @Table("mysql_student") class Student {/*** 學(xué)生的名字*/@Property(name = "name")private String studentName;/*** 學(xué)生的年齡*/@Property(name = "age")private String studentAge;/*** 學(xué)生證*/@Property(name = "id")private String studentId; }/*** test2** @author uuz* @date 2021/01/09*/ public class Test2 {/*** select sql語(yǔ)句構(gòu)造* @param classReferencePath 類(lèi)的參考路徑* @return {@link StringBuilder}* @throws ClassNotFoundException 類(lèi)沒(méi)有發(fā)現(xiàn)異常*/public static StringBuilder selectORM(String classReferencePath) throws ClassNotFoundException {// 通過(guò)反射獲取Student類(lèi)字節(jié)碼Class<?> forName = Class.forName(classReferencePath);// 獲取類(lèi)上的注解Table tableAnnotations= forName.getDeclaredAnnotation(Table.class);// sql字符串StringBuilder sql = new StringBuilder();sql.append("select ");// 獲取類(lèi)所有屬性Field[] declaredFields = forName.getDeclaredFields();for (int i = 0; i < declaredFields.length; i++) {Field f = declaredFields[i];// 獲取類(lèi)屬性上的注解Property property = f.getDeclaredAnnotation(Property.class);sql.append(property.name());if (i < declaredFields.length - 1) {sql.append(",");}}String table = tableAnnotations.value();sql.append(" from ").append(table);return sql;}public static void main(String[] args) throws ClassNotFoundException {StringBuilder selectSql = selectORM("ch9.Student");System.out.println(selectSql);} }

    執(zhí)行結(jié)果

    乞丐版JPA和Junit實(shí)現(xiàn)

    在之前寫(xiě)的博客:
    https://blog.csdn.net/qq_19841133/article/details/108918652

    總結(jié)

    以上是生活随笔為你收集整理的闭关修炼(九)注解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。