/**
* 通过注解拼接建表语句
* create table test_person(
*   pid number(10) primary key,
*   person_name varchar2(255)
* );
* 思路:
*
*
*/
@Table(name="test_person")
public class Person {
  @Id
  private Integer pid;
  @Column(name="person_name")
  private String pname;
  public Integer getPid() {
    return pid;
  }
  public void setPid(Integer pid) {
    this.pid = pid;
  }
  public String getPname() {
    return pname;
  }
  public void setPname(String pname) {
    this.pname = pname;
  }
  public static void main(String[] args) {
    Class clazz = Person.class;
    Table table = (Table)clazz.getAnnotation(Table.class);
    StringBuffer sql = new StringBuffer("create table "+table.name()+" (");
    Field[] fields = clazz.getDeclaredFields();
    for(int i = 0;i<fields.length;i++){
      String fieldName = fields[i].getName();
      Column col = fields[i].getAnnotation(Column.class);
      String colName = col==null?fieldName:col.name();//获取列名
      sql.append(colName);
      if(fields[i].getType()==Integer.class){
        sql.append(" number(10) ");
      }else if(fields[i].getType()==String.class){
        sql.append(" varchar2(255) ");
      }
      Id id = fields[i].getAnnotation(Id.class);
      String pkContent = id==null?",":"primary key,";
      sql.append(pkContent);
    }
    sql.deleteCharAt(sql.length()-1);
    sql.append(")");
    System.out.println(sql);
  }
}

 

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface Table {
  public String name() default("");
}

 

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD,ElementType.FIELD})
public @interface Id {

}

 

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD,ElementType.FIELD})
public @interface Column {
  public String name() default("");
}