Inhaltsverzeichnis
Ursache
Ziel
Code-Framework
Designidee
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

Mar 18, 2017 am 10:32 AM

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!

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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

AI-ID-Fotogenerator: In tatsächlichen Tests zeigte die AI-Software eine einzigartige und leistungsstarke Leistung AI-ID-Fotogenerator: In tatsächlichen Tests zeigte die AI-Software eine einzigartige und leistungsstarke Leistung Aug 09, 2023 pm 07:33 PM

Nach tatsächlichen Tests hat der AI-ID-Fotogenerator eine gute Leistung gezeigt und seine leistungsstarken Funktionen sind erstaunlich. Sie müssen sich wirklich keine Sorgen mehr um das Aufnehmen von Fotos machen! Dieser Satz wird wie folgt umgeschrieben: Verwenden Sie die Chuzhan AI-Software (das Urheberrecht und die Interpretationsrechte liegen bei Chuzhan AI und werden nur zur Darstellung des erzeugten Effekts verwendet). Skizzenmodus: Ob in der täglichen Arbeit oder in Geschäftsbürosituationen, ein professionelles Image ist entscheidend. Ein schönes Ausweisfoto kann das professionelle Image einer Person verbessern. Durch KI generierte Ausweisfotos entsprechen nicht nur herkömmlichen Fotostandards, sondern können auch die einzigartigen Gesichtszüge einer Person wiederherstellen. Die KI-Technologie kann Gesichtskonturen, Hautfarbe, Beleuchtung und andere Details intelligent identifizieren, um das am besten geeignete Ausweisfoto zu erstellen. Ob Aussehen oder Temperament, es kann perfekt dargestellt werden und einen tiefen ersten Eindruck bei den Menschen hinterlassen. KI generiert mit einem Klick Ausweisfotos.

Wie schreibe ich einen einfachen Generator für Schülerleistungsberichte mit Java? Wie schreibe ich einen einfachen Generator für Schülerleistungsberichte mit Java? Nov 03, 2023 pm 02:57 PM

Wie schreibe ich einen einfachen Generator für Schülerleistungsberichte mit Java? Der Student Performance Report Generator ist ein Tool, das Lehrern und Erziehern dabei hilft, schnell Berichte über die Schülerleistung zu erstellen. In diesem Artikel wird erläutert, wie Sie mit Java einen einfachen Generator für Schülerleistungsberichte schreiben. Zuerst müssen wir das Studentenobjekt und das Studentennotenobjekt definieren. Das Schülerobjekt enthält grundlegende Informationen wie den Namen und die Schülernummer des Schülers, während das Schülerergebnisobjekt Informationen wie die Fachnoten und die Durchschnittsnote des Schülers enthält. Das Folgende ist die Definition eines einfachen Studentenobjekts: öffentlich

Bester kostenloser KI-Animationskunstgenerator Bester kostenloser KI-Animationskunstgenerator Feb 19, 2024 pm 10:50 PM

Wenn Sie den besten kostenlosen Generator für KI-Animationskunst suchen, können Sie Ihre Suche beenden. Die Welt der Anime-Kunst fasziniert das Publikum seit Jahrzehnten mit ihren einzigartigen Charakterdesigns, faszinierenden Farben und fesselnden Handlungen. Allerdings erfordert die Erstellung von Anime-Kunst Talent, Geschick und viel Zeit. Dank der kontinuierlichen Weiterentwicklung der künstlichen Intelligenz (KI) können Sie jetzt mithilfe des besten kostenlosen KI-Animationskunstgenerators die Welt der Animationskunst erkunden, ohne sich mit komplexen Technologien befassen zu müssen. Dies eröffnet Ihnen neue Möglichkeiten, Ihrer Kreativität freien Lauf zu lassen. Was ist ein KI-Generator für Anime-Kunst? Der AI Animation Art Generator nutzt hochentwickelte Algorithmen und Techniken des maschinellen Lernens, um eine umfangreiche Datenbank mit Animationswerken zu analysieren. Durch diese Algorithmen lernt und identifiziert das System verschiedene Animationsstile

Generatoren in PHP7: Wie kann man große Datenmengen effizient verarbeiten und Speicher sparen? Generatoren in PHP7: Wie kann man große Datenmengen effizient verarbeiten und Speicher sparen? Oct 20, 2023 pm 04:42 PM

Generatoren in PHP7: Wie kann man große Datenmengen effizient verarbeiten und Speicher sparen? Überblick: PHP7 führt Generatoren als leistungsstarkes Werkzeug im Hinblick auf die Verarbeitung großer Datenmengen und die Speichereinsparung ein. Generatoren sind eine besondere Art von Funktion in der PHP-Sprache. Im Gegensatz zu gewöhnlichen Funktionen können Generatoren die Ausführung anhalten und Zwischenergebnisse zurückgeben, anstatt alle Ergebnisse auf einmal zurückzugeben. Dadurch ist der Generator ideal für die Verarbeitung großer Datenmengen, reduziert den Speicherverbrauch und verbessert die Verarbeitungseffizienz. In diesem Artikel werden Studierende vorgestellt

So schreiben Sie einen einfachen QR-Code-Generator mit PHP So schreiben Sie einen einfachen QR-Code-Generator mit PHP Sep 24, 2023 am 08:49 AM

So schreiben Sie einen einfachen QR-Code-Generator mit PHP QR-Codes sind in der modernen Gesellschaft weit verbreitet. Sie können Informationen schnell übertragen und das Benutzererlebnis verbessern. In diesem Artikel zeige ich Ihnen, wie Sie mit PHP einen einfachen QR-Code-Generator schreiben. 1. Installieren Sie die erforderlichen Tools und Bibliotheken. Bevor wir beginnen, müssen wir sicherstellen, dass die folgenden Tools und Bibliotheken installiert wurden: PHP: Stellen Sie sicher, dass die neueste Version von PHP installiert ist. Sie können die aktuelle PHP-Version überprüfen, indem Sie PHP ausführen -v-Befehl. Komponist: C

Generatoren in PHP7: Wie geht man effizient mit großen Datenmengen und Lazy Loading um? Generatoren in PHP7: Wie geht man effizient mit großen Datenmengen und Lazy Loading um? Oct 27, 2023 pm 07:31 PM

Das Konzept des Generators (Generator) wurde in PHP7 eingeführt, das eine Methode zum effizienten Umgang mit großen Datenmengen und verzögertem Laden bietet. Dieser Artikel beginnt mit Konzepten und Prinzipien, kombiniert mit spezifischen Codebeispielen, um die Verwendung und Vorteile von Generatoren in PHP7 vorzustellen. Ein Generator ist eine spezielle Funktion, die nicht alle Daten auf einmal zurückgibt, sondern Daten bei Bedarf generiert. Wenn die Funktion die yield-Anweisung ausführt, wird der aktuell generierte Wert zurückgegeben und der Status der Funktion gespeichert. Wenn die Generatorfunktion das nächste Mal aufgerufen wird, wird die Funktion ausgeführt

Verwenden Sie ChatGPT, um in Sekundenschnelle große Modelle zu erstellen! Das neue Plug-in von OpenAI ist verrückt. Stellen Sie eine Verbindung zum Code-Interpreter her und erhalten Sie es mit einem Klick Verwenden Sie ChatGPT, um in Sekundenschnelle große Modelle zu erstellen! Das neue Plug-in von OpenAI ist verrückt. Stellen Sie eine Verbindung zum Code-Interpreter her und erhalten Sie es mit einem Klick Apr 04, 2023 am 11:30 AM

Nachdem ChatGPT mit dem Internet verbunden werden konnte, führte OpenAI auch schnell einen Codegenerator ein. Mit der Unterstützung dieses Plug-Ins kann ChatGPT sogar ein eigenes maschinelles Lernmodell generieren. Letzten Freitag gab OpenAI gerade die schockierende Nachricht bekannt, dass ChatGPT eine Verbindung zum Internet und zu Plug-Ins von Drittanbietern herstellen kann! Zusätzlich zu Plug-ins von Drittanbietern führte OpenAI auch sein eigenes Plug-in „Code Interpreter“ ein und bot mehrere spezielle Anwendungsfälle: Lösung quantitativer und qualitativer mathematischer Probleme und schnelle Konvertierung von Dateiformaten; Darüber hinaus demonstrierte Greg Brockman, dass ChatGPT auch hochgeladene Videodateien verarbeiten kann. Und ein Bestsellerautor namens Andrew Mayne

Was ist der Unterschied zwischen Iteratoren und Generatoren in Python? Was ist der Unterschied zwischen Iteratoren und Generatoren in Python? Oct 20, 2023 pm 07:10 PM

Was ist der Unterschied zwischen Iteratoren und Generatoren in Python? In der Python-Programmierung sind Iteratoren und Generatoren Werkzeuge zur Verarbeitung iterierbarer Objekte. Beide können zum Durchlaufen von Daten verwendet werden, es gibt jedoch einige Unterschiede in der Implementierung. Ein Iterator ist ein Objekt, das das Iteratorprotokoll implementiert. Das Iteratorobjekt muss zwei Methoden enthalten: __iter__() und __next__(). Das

See all articles