• 尚学堂210 反射机制读取注解


    package com.bjsxt.test.annotation;
    
    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    
    @Target(value={ElementType.TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    public @interface SxtTable {
        String value();
    }
    package com.bjsxt.test.annotation;
    
    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    
    @Target(value={ElementType.FIELD})
    @Retention(RetentionPolicy.RUNTIME)
    public @interface SxtField {
        String columnName();
        String type();
        int length();
    }
    package com.bjsxt.test.annotation;
    
    @SxtTable("tb_student")
    public class SxtStudent {
        
        @SxtField(columnName="id",type="int",length=10)
        private int id;
        @SxtField(columnName="sname",type="varchar",length=10)
        private String studentName;
        @SxtField(columnName="age",type="int",length=3)
        private int age;
        
        
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public String getStudentName() {
            return studentName;
        }
        public void setStudentName(String studentName) {
            this.studentName = studentName;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        
        
    }
    package com.bjsxt.test.annotation;
    
    import java.lang.annotation.Annotation;
    import java.lang.reflect.Field;
    
    /**
     * 使用反射读取注解的信息,模拟处理注解信息的流程
     * @author 尚学堂高淇
     *
     */
    public class Demo03 {
        
        public static void main(String[] args) {
            try {
                Class clazz = Class.forName("com.bjsxt.test.annotation.SxtStudent");
                
                //获得类的所有有效注解
                Annotation[] annotations=clazz.getAnnotations();
                for (Annotation a : annotations) {
                    System.out.println(a);
                }
                //获得类的指定的注解
                SxtTable st = (SxtTable) clazz.getAnnotation(SxtTable.class);
                System.out.println(st.value());
                
                //获得类的属性的注解
                Field f = clazz.getDeclaredField("studentName");
                SxtField sxtField = f.getAnnotation(SxtField.class);
                System.out.println(sxtField.columnName()+"--"+sxtField.type()+"--"+sxtField.length());
                
                //根据获得的表名、字段的信息,拼出DDL语句,然后,使用JDBC执行这个SQL,在数据库中生成相关的表
                
            } catch (Exception e) {
                e.printStackTrace();
            }
            
        }
    }
    
    
    
     

    程序运行的结果是:

    @com.bjsxt.test.annotation.SxtTable(value=tb_student)
    tb_student
    sname--varchar--10

    我们通过注解就可以获得对应的表名、字段的信息,我们就能够拼接处对应的sql语句,使用jdbc执行这个sql语言,在数据库中生成相关的表

  • 相关阅读:
    vsCode 使用 PHP Intelephense插件函数跳转跟踪
    acme.sh 生成证书一直卡在Getting domain auth token for each domain
    用命令行执行php脚本输出乱码
    js检测是否是手机平台
    个人知识结构索引
    离线环境下安装ansible,借助有网环境下pip工具
    zabbix之微信告警(python版):微信个人报警,微信企业号告警脚本
    使用ansible结合FTP部署zabbix_agent
    datax的可视化-datax-web
    Finereport决策报表
  • 原文地址:https://www.cnblogs.com/kebibuluan/p/7268599.html
Copyright © 2020-2023  润新知