Hibernate——注解结合反射来构建SQL语句的简单的处理器模型

基础知识:实际上Java注解与普通修饰符(public、static、void等)的使用方式并没有多大区别

【1】@Test内部没有定义其他元素,所以@Test也称为标记注解(marker annotation),但在自定义注解中,一般都会包含一些元素以表示某些值,方便处理器使用

【2】利用运行时注解来组装数据库SQL的构建语句的过程

【3】Java8后,新增的TYPE_PARAMETER可以用于标注类型参数,而TYPE_USE则可以用于标注任意类型(不包括class)。

【4】声明注解元素时可以使用基本类型但不允许使用任何包装类型,同时还应该注意到注解也可以作为元素的类型,也就是嵌套注解

【5】对于非基本类型的元素,无论是在源代码中声明,还是在注解接口中定义默认值,都不能以null作为值

【6】注解是不支持继承的,因此不能使用关键字extends来继承某个@interface,但注解在编译后,编译器会自动继承java.lang.annotation.Annotation接口

【7】所谓的快捷方式就是注解中定义了名为value的元素,并且在使用该注解时,如果该元素是唯一需要赋值的一个元素,那么此时无需使用key=value的语法,而只需在括号内给出value元素所需的值即可:ex:@IntegerVaule(20)

【8】其他内置注解源码:

image

deprecation:使用了不赞成使用的类或方法时的警告;
unchecked:执行了未检查的转换时的警告,例如当使用集合时没有用泛型 (Generics) 来指定集合保存的类型;
fallthrough:当 Switch 程序块直接通往下一种情况而没有 Break 时的警告;
path:在类路径、源文件路径等中有不存在的路径时的警告;
serial:当在可序列化的类上缺少 serialVersionUID 定义时的警告;
finally:任何 finally 子句不能正常完成时的警告;
all:关于以上所有情况的警告。

【9】@Documented 被修饰的注解会生成到javadoc中:javadoc DocumentDemo.java DocumentA.java DocumentB.java

【10】@Inherited 可以让注解被继承,但这并不是真的继承,只是通过使用@Inherited,可以让子类Class对象使用getAnnotations()获取父类被@Inherited修饰的注解

【4】应用:数据库表与Bean类的映射

注射与反射结合:

Java使用Annotation接口代表注解元素,该接口是所有Annotation类型的父接口。同时为了运行时能准确获取到注解的相关信息,Java在java.lang.reflect 反射包下新增了AnnotatedElement接口,它主要用于表示目前正在 VM 中运行的程序中已使用注解的元素,通过该接口提供的方法可以利用反射技术地读取注解的信息,如反射包的Constructor类、Field类、Method类、Package类和Class类都实现了AnnotatedElement接口。

————————————————

API接口包括:

image

==================================================================


【1】@Target(value={CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE})

【2】@Retention(value={SOURCE,CLASS,RUNTIME})

【3】注解支持地数据类型:

  • 所有基本类型(int,float,boolean,byte,double,char,long,short)

  • String

  • Class

  • enum

  • Annotation

  • 上述类型的数组

ex:

    //枚举类型
     enum Status {FIXED,NORMAL};

    //声明枚举
     Status status() default Status.FIXED;

    //布尔类型
     boolean showSupport() default false;

    //String类型
     String name()default "";

    //class类型
     Class<?> testCase() default Void.class;

    //注解嵌套
     Reference reference() default @Reference(next=true);

    //数组类型
    long[] value();

运行时注解来组装数据库SQL的构建语句:实例



Hive:是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表



Java 8中注解增强

【1】@Repeatable是JDK1.8新加入的,它表示在同一个位置重复相同的注解

ex:

@Target({ElementType.TYPE,ElementType.FIELD,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Inherited //添加可继承元注解
@Repeatable(FilterPaths.class)
public @interface FilterPath {
     String  value();
}


@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Inherited //添加可继承元注解
@interface FilterPaths {
     FilterPath[] value();
}

@FilterPath("/web/list")
@FilterPath("/web/getList")
class CC { }

//AA上不使用@FilterPath注解,getAnnotationsByType将会从父类查询
class AA extends CC{}

【2】@FilterPath和@FilterPath时必须指明@Inherited,




原文链接:https://blog.csdn.net/javazejian/article/details/71860633
posted @ 2020-07-06 20:03  小海_macro  阅读(293)  评论(0编辑  收藏  举报