Java基础学习:注解和反射15( 反射操作注解 )

Java基础学习:注解和反射15

  • 反射操作注解:

    • getAnnotations:

    • getAnnotation;

 

  • 练习ORM:

    • 什么是ORM:Object relationship Mapping:对象关系映射

    • 类和表结构对应

    • 属性和字段对应

    • 对象和记录对应

       

  • 要求:利用注解和反射完成类和表结构的映射关系:

    • 通过反射自动创建表;(重点)

       


    /**
    * 练习:反射操作注解
    */
    public class Test12 {

       public static void main(String[] args) throws Exception {

           Class<?> c1 = Class.forName("com.demo.demo03.Student");

           //通过反射获得注解
           Annotation[] annotations = c1.getAnnotations();
           for (Annotation annotation : annotations) {
               System.out.println(annotation);
          }

           //获得注解的value的值
           TableDemo tableDemo = (TableDemo)c1.getAnnotation(TableDemo.class);
           String value=tableDemo.value();
           System.out.println(value);//db_student


           //获得类指定的注解
           Field f = c1.getDeclaredField("name");
           FieldDemo fd=(FieldDemo)f.getAnnotation(FieldDemo.class);
           System.out.println(fd.columnName());
           System.out.println(fd.length());
           System.out.println(fd.type());



      }

    }



    @TableDemo("db_student")
    class Student{

       @FieldDemo(columnName="db_id",type="int",length=10 )
       private int id;
       @FieldDemo(columnName="db_age",type="int",length=10 )
       private int age;
       @FieldDemo(columnName="db_name",type="varchar",length=3 )
       private String name ;

       public Student() {
      }

       public Student(int id, int age, String name) {


           this.id = id;
           this.age = age;
           this.name = name;
      }

       public int getId() {
           return id;
      }

       public void setId(int id) {
           this.id = id;
      }

       public int getAge() {
           return age;
      }

       public void setAge(int age) {
           this.age = age;
      }

       public String getName() {
           return name;
      }

       public void setName(String name) {
           this.name = name;
      }

       @Override
       public String toString() {
           return "Student{" +
                   "id=" + id +
                   ", age=" + age +
                   ", name='" + name + '\'' +
                   '}';
      }
    }


    //类名的注解
    @Target(ElementType.TYPE)
    @Retention(RetentionPolicy.RUNTIME)
    @interface TableDemo{
       String value();
    }


    //属性的注解
    @Target(ElementType.FIELD)
    @Retention(RetentionPolicy.RUNTIME)
    @interface FieldDemo{

       String columnName();
       String type();
       int length();
    }

     

 

 

 

 

posted @   gzs1024  阅读(82)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示