Heim >Java >javaLernprogramm >Ausführliche Erläuterung des Designs und der Implementierung des Java Web Template Code Generators
Im Projekt müssen viele Meta-, Dao- und Servicecodes basierend auf Datenbanktabellen geschrieben werden, und viele davon sind repetitiv und umständlich. Wenn daher ein Generator für Vorlagencode vorhanden ist, kann die Entwicklungseffizienz bis zu einem gewissen Grad verbessert werden.
Konfigurierbarer Generator zum Generieren von Dao-, Meta- und Service-Layer-Vorlagencodes in Java-Webprojekten.
mvn archetype:generate -DgroupId=com.zju -DartifactId=JavaWebCodeGenerator -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false -DarchetypeCatalog=internal
Das Projekt bezieht sich auf den Prozess der Codegenerierung mit dem Mybatis-Generator. Die spezifischen Schritte sind in die folgenden 5 Schritte unterteilt.
Logische Schritte
Befehlszeile analysieren
Befehlsparsing-Klasse ShellRunner
Diese Klasse ist für das Parsen von Befehlszeilenbefehlen, das Parsen von Konfigurationsdateien und das Kapseln der erforderlichen Daten verantwortlich Daten zur Codegenerierungsklasse. Die analysierbaren Befehle sind-config<a href="http://www.php.cn/wiki/1313.html" target="_blank">file<p></p></a>
: Geben Sie den Pfad an, in dem sich die Konfigurationsdatei befindet, und -config<a href="http://www.php.cn/wiki/1313.html" target="_blank">file</a>
: ob die Zieldatei neu geschrieben werden soll. -overwrite
Die Konfigurationselemente der Konfigurationsdatei sind: //Java SQL 驱动所在路径(暂未使用) private static final String CLASS_PATH_ENTRY = "class.path.entry"; //Java 驱动类型(暂未使用) private static final String DRIVER_CLASS = "driver.class"; //数据库地址 private static final String CONNECTION_URL = "connection.url"; //数据库用户名 private static final String USER_ID = "user.id"; //数据库密码 private static final String USER_PASSWORD = "user.password"; //模型生成地址 private static final String JAVA_MODEL_PACKAGE = "java.model.package"; //SQL生成地址 private static final String SQL_MAPPING_PACKAGE = "sql.mapping.package"; //项目地址 private static final String PROJECT = "project"; //数据表名 private static final String TABLE_NAME = "table.name"; //模型名称 private static final String DOMAIN_OBJECT_NAME = "domain.object.name";
Codegenerierungsklasse CodeGenerator
Diese Klasse ist für die Verbindung zur Datenbank und verantwortlich Abfrage der Tabelleninformationen der Datentabelle, Zuordnung von SQL-Typen zu Java-Typen und Kapselung der erforderlichen Daten in der Dateigenerierungsklasse.Class.forName(configuration.getDriverClass()); //获取数据库连接 Connection connection = DriverManager.getConnection(configuration.getConnectionURL(), configuration.getUserId(), configuration.getPassword()); DatabaseMetaData databaseMetaData = connection.getMetaData(); //获取表结构信息 ResultSet rs = databaseMetaData.getColumns("", "", configuration.getTableName(), "%");Durch die obigen Codezeilen wurden die Tabelleninformationen der Zieldatentabelle in der rs-Variablen abgerufen. Der Kern der
-Methode besteht darin, die databaseMetaData.getColumns
-Anweisung auszuführen. SELECT * FROM information_schema.COLUMNS WHERE TABLE_NAME="tableName"
Feld | Beschreibung |
---|---|
DATA_TYPE | Datentyp |
COLUMN_SIZE | Datenlänge |
COLUMN_NANE | Spaltenname |
Ob ungleich Null zulässig ist | |
DECIMAL_DIGITS | Dezimalstellen |
BEMERKUNGEN | Bemerkungen |
COLUMN_DEF | Standardwert |
字段 | 描述 |
---|---|
DATA_TYPE | 数据类型 |
COLUMN_SIZE | 数据长度 |
COLUMN_NANE | 列名 |
NULLABLE | 是否允许非空 |
DECIMAL_DIGITS | 小数位数 |
REMARKS | 备注 |
COLUMN_DEF | 默认值 |
) in JavaTypeResolver
und Kamel-Case-Benennungskonvertierung (Map<integer jdbctypeinformation> typeMap</integer>
) in StringUtils
in Java-Informationen um. getCamelCaseString
Dateigenerierungsklasse FileGenerator
Diese Klasse kombiniert Daten über dieFreeMarkerVorlagen-Engine zu einer Zielcodedatei.
Die Hauptlogik lautet wie folgt:/** * @param configuration 封装的配置信息 * @param columns 封装的数据表列信息 * @throws IOException * @throws TemplateException */ public static void writeFile(Configuration configuration, List<TableColumn> columns) throws IOException, TemplateException { File r=new File(""); //测试环境获取项目根目录路径 //String path=Class.class.getClass().getResource("/").getPath(); //Jar包获取根目录路径 String path=r.getAbsolutePath(); //System.out.println("path:"+path); Configuration cfg = new Configuration(); cfg.setDirectoryForTemplateLoading(new File(path + "/ftl")); //需要文件夹绝对路径 cfg.setDefaultEncoding("UTF-8"); cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER); Map root = new HashMap(); root.put("configuration", configuration); root.put("columnList", columns); writeSingleFile(cfg, root, "DaoImpl.ftl", configuration.getProjectPath(), configuration.getSqlMappingPackage().replace(".", "/"), configuration.getDomainObjectName(), "DaoImpl.java",configuration.getOverwrite()); writeSingleFile(cfg, root, "Dao.ftl", configuration.getProjectPath(), configuration.getSqlMappingPackage().replace(".", "/"), configuration.getDomainObjectName(), "Dao.java",configuration.getOverwrite()); writeSingleFile(cfg, root, "Meta.ftl", configuration.getProjectPath(), configuration.getJavaModelPackage().replace(".", "/"), configuration.getDomainObjectName(), ".java",configuration.getOverwrite()); }
Hinweis
Beim TestenDiese Methode kann das Projektstammverzeichnis abrufen. aber beim Testen ist diese Methode effektiv, wenn ein Jar-Paket generiert wird. Daher müssen Sie diese Zeile vor dem Generieren des Jar-Pakets in Class.class.getClass().getResource("/").getPath();
ändern, um den Generierungspfad zu erhalten. new File("").getAbsolutePath();
class.path.entry=src/test/resources/mysql-connector-java-5.1.38.jar driver.class=com.mysql.jdbc.Driver connection.url=jdbc:mysql://localhost:3307/work user.id= user.password= java.model.package=com.model sql.mapping.package=com.dao project=src table.name=holiday domain.object.name=HolidayBeispiel für einen Befehl ausführen
java -jar JavaWebCodeGenerator.jar -configfile generatorConfig.properties -overwrite
Das obige ist der detaillierte Inhalt vonAusführliche Erläuterung des Designs und der Implementierung des Java Web Template Code Generators. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!