gendomain.java

来自「anewssystem新闻发布系统集成使用了spring hibernate f」· Java 代码 · 共 150 行

JAVA
150
字号

package anni.tools;

import java.io.*;
import java.lang.reflect.*;
//import java.text.*;
import java.util.*;
import freemarker.template.*;
import jxl.*;
import java.lang.annotation.*;
import java.lang.reflect.*;
import java.util.*;
import javax.persistence.*;
import org.hibernate.annotations.GenericGenerator;

@SuppressWarnings("unchecked")
public class GenDomain {
    String genDir;
    String packageName;
    String excelFile;
    String projectName;
    String prefix;
    Date now = new Date();

    DomainUtils domainUtils = new DomainUtils();

    /**
     * args[0] genDir "./target/gen-domain/"
     * args[1] packageName "anni.anews.domain"
     * args[2] excelFile "res/sample.xls"
     * args[3] projectName "anews"
     * args[4] prefix = "A_NEWS_"
     */
    void init(String[] args) {
        genDir = args[0];
        packageName = args[1];
        excelFile = args[2];
        projectName = args[3];
        prefix = args[4];
        domainUtils.prefix = prefix;
    }

    public GenDomain() throws Exception {
    }

    void generateAll(String[] args) throws Exception {
        init(args);

        String[] classes = ExcelUtils.getClassNames(excelFile);

        for (int i = 0; i < classes.length; i++) {
            String className = classes[i];
            Class clz = Class.forName(packageName + "." + className);
            Field[] fields = clz.getDeclaredFields();
            generateDomain(className, clz, fields);
            generateDomainTest(className, fields);
        }
    }


    void generateDomain(String className, Class pojo, Field[] fields) throws Exception {
        Map model = new HashMap();
        model.put("className", className);
        model.put("packageName", packageName);
        model.put("pojo", pojo);
        model.put("fields", fields);
        model.put("domainUtils", domainUtils);
        model.put("now", now);

        model.put("importList", getImportList(pojo));

        FreemarkerUtils.process("templates/src/main/java/domain/domain.java",
            model,
            "target/" + projectName + "/src/main/java/" + packageName.replaceAll("\\.", "/"),
            className + ".java");
    }

    void generateDomainTest(String className, Field[] fields) throws Exception {
        Map model = new HashMap();
        model.put("className", className);
        model.put("packageName", packageName);
        model.put("fields", fields);

        FreemarkerUtils.process("templates/src/test/java/domain/Test.java",
            model,
            "target/" + projectName + "/src/test/java/" + packageName.replaceAll("\\.", "/"),
            className + "Test.java");
    }

    // ====================================================

    Set<String> getImportList(Class clz) throws Exception {
        List<Annotation> annoList = getAllMethodAnnotations(clz);
        Set<String> importList = new TreeSet<String>();
        for (Annotation annotation : annoList) {
            Class annoClass = annotation.annotationType();
            if (annoClass == ManyToOne.class) {
                importList.add("javax.persistence.ManyToOne");
                importList.add("javax.persistence.FetchType");
                importList.add("javax.persistence.JoinColumn");
            } else if (annoClass == OneToMany.class) {
                importList.add("java.util.Set");
                importList.add("java.util.HashSet");
                importList.add("javax.persistence.OneToMany");
                importList.add("javax.persistence.JoinColumn");
                importList.add("javax.persistence.FetchType");
                importList.add("javax.persistence.CascadeType");
            } else if (annoClass == ManyToMany.class) {
                importList.add("java.util.Set");
                importList.add("java.util.HashSet");
                importList.add("javax.persistence.ManyToMany");
                importList.add("javax.persistence.JoinColumn");
                importList.add("javax.persistence.JoinTable");
                importList.add("javax.persistence.CascadeType");
                importList.add("javax.persistence.FetchType");
            } else if (annoClass == Column.class) {
                Column anno = (Column) annotation;
                if (anno.length() > 255) {
                    importList.add("javax.persistence.Lob");
                }
            }
        }
        for (Field field : clz.getDeclaredFields()) {
            if (field.getType() == Date.class) {
                importList.add("java.util.Date");
                importList.add("javax.persistence.Temporal");
                importList.add("javax.persistence.TemporalType");
            }
        }
        return importList;
    }
    List<Annotation> getAllMethodAnnotations(Class clz) throws Exception {
        List<Annotation> list = new ArrayList<Annotation>();
        Method[] methods = clz.getDeclaredMethods();
        for (Method method : methods) {
            if (method.getName().startsWith("get")) {
                for (Annotation annotation : method.getDeclaredAnnotations()) {
                    list.add(annotation);
                }
            }
        }
        return list;
    }

    public static void main(String[] args) throws Exception {
        GenDomain gen = new GenDomain();
        gen.generateAll(args);
    }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?