zoukankan      html  css  js  c++  java
  • Java Annotation 刷课笔记(一)

    1.什么是注解?

    1.1.Annotation是从JDK5.0引入的新技术

    1.2.Annotation的作用:

    • 不是程序本身,可以对程序作出解释(这一点,和注释没什么区别)
    • 可以被其他程序(比如编译器)读取,注解信息处理流程,是注解和注解的重大区别,如果没有注解信息的处理流程,则注解毫无意义

    1.3.内置注解

    @Override 重载

    @Deprecated  不建议使用

    @SupressWarning  去除警告信息

    2.自定义注解

    2.1.自定义注解的前提是注解上要加入两个元注解

    2.1.1.Target 注解目标是谁

      package   包

      type          类,接口,枚举,Annotation

      constructor 构造器

      field    描述域

      method    描述方法

      local_variable   局部变量

    2.1.2 Retention 需要在什么级别保存注解信息,用于描述注释的声明周期(是CLASS,SOURCE还是RUNTIME)

      source  在源文件中保留

      class   在class文件中保留

      runtime  在运行时可以被反射读取(这个用的比较多)

    2.1.3 可以写类似方法的参数

    String stu() default "";

    3.利用反射机制读取注解信息

    示例:使用反射写一个程序来创建tb_student表

    studnet类

    package littlepage.annotation.demo01;
    
    @AnnoTable("tb_student")
    public class Student {
        @AnnoField(columnName = "id",type = "int",length = 10)
        private int id;
        @AnnoField(columnName = "name",type = "varchar",length = 255)
        private String name;
        @AnnoField(columnName = "field",type = "varchar",length = 10)
        private int age;
    }

    AnnoTable Annotation

    package littlepage.annotation.demo01;
    
    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    
    @Retention(RetentionPolicy.RUNTIME)
    @Target(ElementType.TYPE)
    public @interface AnnoTable {
        String value();
    }

    AnnoField Annotation

    package littlepage.annotation.demo01;
    
    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    
    @Target(ElementType.FIELD)
    @Retention(RetentionPolicy.RUNTIME)
    public @interface AnnoField {
        String columnName();
        String type();
        int length();
    }

    转换类

    package littlepage.annotation.demo01;
    
    
    import java.lang.annotation.Annotation;
    import java.lang.reflect.Field;
    
    public class Demo01 {
        public static void toSQL(Class<?> clazz) {
            //拿到类名上的属性值
            AnnoTable table = (AnnoTable) clazz.getAnnotation(AnnoTable.class);
            String tableName = table.value();
            //拼SQL
            StringBuilder sb = new StringBuilder();
            sb.append("create table ").append(tableName).append("(
    ");
            //拿到各个Field
            Field[] fields = clazz.getDeclaredFields();
            String fieldString;
            for (Field field : fields) {
                Annotation[] annotations=field.getAnnotations();
                for (Annotation annotation:annotations) {
                    String annotationString=annotation.toString();
                    String columnName=annotationString.substring(annotationString.indexOf("columnName=")+11,annotationString.indexOf(", type"));
                    String typeName=annotationString.substring(annotationString.indexOf("type=")+5,annotationString.indexOf(", length"));
                    String length=annotationString.substring(annotationString.indexOf("length=")+7,annotationString.indexOf(")"));
                    sb.append(columnName+" "+typeName+"("+length+"),
    ");
                }
            }
            sb.replace(sb.length()-1,sb.length(),"
    );");
            System.out.println(sb);
        }
    
        public static void main(String[] args) {
            toSQL(Student.class);
        }
    }
  • 相关阅读:
    布署脚本
    HTTP请求报文支持的各种方法
    robot framework学习笔记之六—自动变量
    robot framework接口测试之二-四种常见的POST提交数据方式
    自定义过滤器-时间转化器
    自定义过滤器-有参数
    自定义过滤器-没有参数
    过滤器-orderBy
    过滤器-limitBy
    过滤器-filterBy
  • 原文地址:https://www.cnblogs.com/littlepage/p/11235595.html
Copyright © 2011-2022 走看看