zoukankan      html  css  js  c++  java
  • 使用注解完成类和表结构的映射关系

    创建注解MyTable,用来注解Stu类

    @Target(value={ElementType.TYPE})    TYPE表示只能在类上面注解
    @Retention(RetentionPolicy.RUNTIME)
    public @interface MyTable {
        String value();
    }

    创建注解MyField,用来注解Stu的属性

    @Target(value={ElementType.FIELD})
    @Retention(RetentionPolicy.RUNTIME)
    public @interface MyField {//Field:字段
        String colName();//列名
        String type();   //类型
        int length();    //长度
        boolean pk();    //主键
        boolean increase();//自增
    }

    创建学生类MyStu,类名用@MyTable("tb_student")注解,每个属性的内容不一样

    比如:id用@MyField(colName="id",length=10,type="int",increase=true,pk=true)注解

    package cs.cwnu.test;
    
    @MyTable("tb_student")
    public class MyStu {
        @MyField(colName="id",length=10,type="int",increase=true,pk=true)
        private int id;
        @MyField(colName="name",length=10,type="varchar",increase=false,pk=false)
        private String name;
        @MyField(colName="age",length=10,type="int",increase=false,pk=false)
        private int age;
        
        
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        
    }

    解析注解中的值,与数据库中字段属性对应

    //使用反射读取注解信息
    @SuppressWarnings("all")//用来清除所有警告的注解
    public class Demo {
        public static void main(String[] args) throws NoSuchFieldException, SecurityException  {
            try {
                Class clazz = Class.forName("cs.cwnu.test.MyStu");
                MyTable mt = (MyTable)clazz.getAnnotation(MyTable.class);
                System.out.println("类的注解内容为:"+mt.value());
                Field[] declaredFields = clazz.getDeclaredFields();
                for (Field field : declaredFields) {
                    String s = field.getName();
                    System.out.println("类的属性为:"+s);
                    Field f = clazz.getDeclaredField(s);
                    MyField myField = f.getAnnotation(MyField.class);
                    System.out.print("列名:"+myField.colName());
                    System.out.print("类型:"+myField.type());
                    System.out.print("长度:"+myField.length());
                    System.out.print("自增:"+myField.increase());
                    System.out.print("主键:"+myField.pk());
                    System.out.println();
                }
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
    }

    结果显示:

    类的注解内容为:tb_student
    类的属性为:id
    列名:id类型:int长度:10自增:true主键:true
    类的属性为:name
    列名:name类型:varchar长度:10自增:false主键:false
    类的属性为:age
    列名:age类型:int长度:10自增:false主键:false

    由以上信息,我们可以写sql语句创建数据库。

  • 相关阅读:
    [BZOJ3195] [Jxoi2012]奇怪的道路
    Splay Tree
    区间DP复习
    Link Cut Tree
    [BZOJ2734] [HNOI2012]集合选数
    如何写出杀手级简历(针对程序员) (转)
    30个提高Web程序执行效率的好经验(转)
    Oracle中的SQL跟踪( 转)
    如何终止SQL Server中的用户进程(转)
    Will the real programmers please stand up?(转)
  • 原文地址:https://www.cnblogs.com/5aixin/p/11104121.html
Copyright © 2011-2022 走看看