hibernate注解,jpa注解根据类生成表

定义几个注解类

package cn.martin.core.service.anno.e2;

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 Constraints {

    boolean primaryKey() default false;
    boolean  allowNull() default true;
    boolean  unique() default false;

}
package cn.martin.core.service.anno.e2;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface DBTable {

    public String name() default "";
}
package cn.martin.core.service.anno.e2;

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 SQLInteger {

    String name() default "";

    Constraints constraints()  default  @Constraints;

}
package cn.martin.core.service.anno.e2;

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 SQLString {

    int value()  default 0;

    String name() default "";

    Constraints constraints()  default  @Constraints;
}

pojo添加注解

package cn.martin.core.service.anno.e2;

@DBTable(name="TB_MEMBER")
public class Member {

    @SQLString(30)
    private String firstname;

    @SQLInteger
    private int age;

    @SQLString(value=30,constraints=@Constraints(primaryKey=true))
    String id;

    public String getFirstname() {
        return firstname;
    }

    public void setFirstname(String firstname) {
        this.firstname = firstname;
    }

    public int getAge() {
        return age;
    }

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

    public String getId() {
        return id;
    }

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

    @Override
    public String toString() {
        return "Member [id=" + id + "]";
    }
}

注解处理类

package cn.martin.core.service.anno.e2;

import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;

public class TableCreate {

    public static void main(String[] args) throws ClassNotFoundException {
         String[]  tyleArys = new String [] {"cn.martin.core.service.anno.e2.Member"};
         createSql(tyleArys);
    }


    public static void   createSql(String[] args) throws ClassNotFoundException{

        for (String className : args) {
            Class<?> cls = Class.forName(className);
            DBTable dbTable = cls.getAnnotation(DBTable.class);
            if(dbTable == null){
                continue;
            }
            String tableName = dbTable.name();
            if(tableName.length() < 1){
                tableName = cls.getName().toUpperCase();
            }
            List<String> columnsDef = new ArrayList<String>();
            for (Field  field : cls.getDeclaredFields()) {
                String columnName = null;
                Annotation[] anns = field.getDeclaredAnnotations();
                if(anns.length < 0){
                    continue;
                }
                if(anns[0] instanceof SQLInteger){
                    SQLInteger sQLInteger =  (SQLInteger)anns[0];
                    if(sQLInteger.name().length() < 1){
                        columnName = field.getName().toUpperCase();
                    }else{
                        columnName = sQLInteger.name();
                    }
                    columnsDef.add( columnName +" INT  "+ getConstraints(sQLInteger.constraints()));
                }
                if(anns[0] instanceof SQLString){
                    SQLString sQLString = (SQLString)anns[0];
                    if(sQLString.name().length() < 1){
                        columnName = field.getName().toUpperCase();
                    }else {
                        columnName = sQLString.name();
                    }
                    columnsDef.add( columnName + " varchar ("+sQLString.value()+ ")" + getConstraints(sQLString.constraints()));
                }
            }

            StringBuilder sb = new StringBuilder("create  table  "+tableName + " ( ");

            for (String column : columnsDef) {
                sb.append("\n" + column + " ,");
            }
            String createTable = sb.substring(0,sb.length()-1)+" );";
            System.out.println(createTable);
        }

    }

    public static  String getConstraints(Constraints con){
        String constaints = "";
        if(!con.allowNull()){
            constaints += " not null  ";
        }
        if(con.primaryKey()){
            constaints += " primary key ";
        }
        if(con.unique()){
            constaints += "   unique ";
        }
        return constaints;
    }
}

测试结果

create  table  TB_MEMBER ( 
FIRSTNAME varchar (30) ,
AGE INT   ,
ID varchar (30) primary key   );
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值