Heim > Java > javaLernprogramm > Ausführliche Erläuterung des Designs und der Implementierung des Java Web Template Code Generators

Ausführliche Erläuterung des Designs und der Implementierung des Java Web Template Code Generators

黄舟
Freigeben: 2017-03-18 10:32:23
Original
2360 Leute haben es durchsucht

Ursache

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.

Ziel

Konfigurierbarer Generator zum Generieren von Dao-, Meta- und Service-Layer-Vorlagencodes in Java-Webprojekten.

Code-Framework

mvn archetype:generate 
-DgroupId=com.zju 
-DartifactId=JavaWebCodeGenerator 
-DarchetypeArtifactId=maven-archetype-webapp 
-DinteractiveMode=false 
-DarchetypeCatalog=internal
Nach dem Login kopieren

Designidee

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

  1. Befehlszeile analysieren

  2. Die Konfigurationsdatei< analysieren 🎜>

  3. Datentabelleninformationen abrufen

  4. Konfigurationsinformationen generieren

  5. Datei generieren

Codedesign

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> : 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";
Nach dem Login kopieren

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(), "%");
Nach dem Login kopieren
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"

In der Ergebnismenge sind für die nachfolgende Verarbeitung im Allgemeinen die folgenden Tabelleninformationsspalten erforderlich.

< td>NULLABLE< /table>
FeldBeschreibung
DATA_TYPEDatentyp

COLUMN_SIZEDatenlänge
COLUMN_NANESpaltenname
Ob ungleich Null zulässig ist
DECIMAL_DIGITSDezimalstellen
BEMERKUNGENBemerkungen
COLUMN_DEFStandardwert
字段描述
DATA_TYPE数据类型
COLUMN_SIZE数据长度
COLUMN_NANE列名
NULLABLE是否允许非空
DECIMAL_DIGITS小数位数
REMARKS备注
COLUMN_DEF默认值
wandelt schließlich SQL-Informationen durch Typzuordnung (

) in JavaTypeResolver und Kamel-Case-Benennungskonvertierung (Map<Integer, JdbcTypeInformation> typeMap) in StringUtils in Java-Informationen um. getCamelCaseString

Dateigenerierungsklasse FileGenerator

Diese Klasse kombiniert Daten über die

FreeMarkerVorlagen-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());
}
Nach dem Login kopieren

Hinweis

Beim Testen

Diese 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();

Projektstruktur

Ausführliche Erläuterung des Designs und der Implementierung des Java Web Template Code Generators

Beispiel für eine Konfigurationsdatei

generatorConfig.properties

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=Holiday
Nach dem Login kopieren
Beispiel für einen Befehl ausführen

java -jar JavaWebCodeGenerator.jar -configfile generatorConfig.properties -overwrite
Nach dem Login kopieren

Beispieldemonstration

Ausführliche Erläuterung des Designs und der Implementierung des Java Web Template Code Generators

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage