// annotations/database/TableCreator.java// (c)2017 MindView LLC: see Copyright.txt// We make no guarantees that this code is fit for any purpose.// Visit http://OnJava8.com for more book information.// Reflection-based annotation processor// {java annotations.database.TableCreator// annotations.database.Member}package annotations.database;import java.lang.annotation.*;import java.lang.reflect.*;import java.util.*;public class TableCreator {public static voidmain(String[] args) throws Exception {if(args.length < 1) {System.out.println("arguments: annotated classes");System.exit(0);}for(String className : args) {Class<?> cl = Class.forName(className);DBTable dbTable = cl.getAnnotation(DBTable.class);if(dbTable == null) {System.out.println("No DBTable annotations in class " +className);continue;}String tableName = dbTable.name();// If the name is empty, use the Class name:if(tableName.length() < 1)tableName = cl.getName().toUpperCase();List<String> columnDefs = new ArrayList<>();for(Field field : cl.getDeclaredFields()) {String columnName = null;Annotation[] anns =field.getDeclaredAnnotations();if(anns.length < 1)continue; // Not a db table columnif(anns[0] instanceof SQLInteger) {SQLInteger sInt = (SQLInteger) anns[0];// Use field name if name not specifiedif(sInt.name().length() < 1)columnName = field.getName().toUpperCase();elsecolumnName = sInt.name();columnDefs.add(columnName + " INT" +getConstraints(sInt.constraints()));}if(anns[0] instanceof SQLString) {SQLString sString = (SQLString) anns[0];// Use field name if name not specified.if(sString.name().length() < 1)columnName = field.getName().toUpperCase();elsecolumnName = sString.name();columnDefs.add(columnName + " VARCHAR(" +sString.value() + ")" +getConstraints(sString.constraints()));}StringBuilder createCommand = new StringBuilder("CREATE TABLE " + tableName + "(");for(String columnDef : columnDefs)createCommand.append("\n " + columnDef + ",");// Remove trailing commaString tableCreate = createCommand.substring(0, createCommand.length() - 1) + ");";System.out.println("Table Creation SQL for " +className + " is:\n" + tableCreate);}}}private staticString getConstraints(Constraints con) {String constraints = "";if(!con.allowNull())constraints += " NOT NULL";if(con.primaryKey())constraints += " PRIMARY KEY";if(con.unique())constraints += " UNIQUE";return constraints;}}/* Output:Table Creation SQL for annotations.database.Member is:CREATE TABLE MEMBER(FIRSTNAME VARCHAR(30));Table Creation SQL for annotations.database.Member is:CREATE TABLE MEMBER(FIRSTNAME VARCHAR(30),LASTNAME VARCHAR(50));Table Creation SQL for annotations.database.Member is:CREATE TABLE MEMBER(FIRSTNAME VARCHAR(30),LASTNAME VARCHAR(50),AGE INT);Table Creation SQL for annotations.database.Member is:CREATE TABLE MEMBER(FIRSTNAME VARCHAR(30),LASTNAME VARCHAR(50),AGE INT,REFERENCE VARCHAR(30) PRIMARY KEY);*/
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。