[JAVA] [VBA] Ich habe ein Tool erstellt, um den primitiven Typ der von Hibernate Tools generierten Entity-Klasse in den entsprechenden Referenztyp zu konvertieren.

Ruhezustand Tools, mit denen die entsprechende Entitätsklasse basierend auf der Tabellendefinition und der VIEW-Definition sofort erstellt werden kann. Es ist sehr praktisch, aber standardmäßig werden numerische Typen als primitive Typen erstellt. Wenn der DB-Wert null enthalten kann, ist dies NG. Ich habe nach einer Einstellung gesucht, die in den entsprechenden Referenztyp konvertiert werden kann (null ist im Gegensatz zum primitiven Typ akzeptabel), aber sie ist nicht herausgekommen ... Wenn dies der Fall ist, ist es schneller zu schaffen! Also habe ich ein Werkzeug gemacht, um das oben genannte zu realisieren.

Umgebung

Entitätsklasse erstellen

So erstellen Sie eine Entitätsklasse in den Tools für den Ruhezustand

Da es in ausführlich beschrieben wird, werde ich es in diesem Artikel weglassen.

Datentyp-Entsprechungstabelle

Der MySQL-Datentyp (im Folgenden MySQL), der von Hibernate Tools (im Folgenden Hibernate Tools) ausgegebene Java-Datentyp und die entsprechenden Referenztypen lauten wie folgt. (Dies ist das Ausgabeergebnis der tatsächlichen Ausführung von Hibernate Tools.)

MySQL HibernateTools(Java) Entsprechender Referenztyp(Java)
INTEGER int Integer
INT int Integer
TINYINT byte Byte
SMALLINT short Short
MEDIUMINT int Integer
BIGINT BigInteger -
DECIMAL BigDecimal -
NUMERIC BigDecimal -
FLOAT float Float
DOUBLE double Double
BIT byte Byte

Da BigInteger und BigDecimal Referenztypen sind, ist keine Konvertierung erforderlich, sodass die entsprechenden Referenztypen nicht geschrieben werden. Trotzdem wird INTEGER als Integer und BIGINT so lange ausgegeben, nicht wahr?

Code

Basierend auf dem oben Gesagten habe ich den VBA-Code erstellt. (Es gibt einige andere Konvertierungen als den numerischen Typ.)

python


Sub macro_for_entity_class_java()

    Dim filePath As String 'Zum Abrufen des Dateipfads
    Dim javaFile As String 'Für die Java-Dateierfassung
    
    Dim FSO As Object 'Zur Dateiverarbeitung
    
    Dim replaceContent As String  'Zur Konvertierung von Zeichenfolgen
    
    Dim reg As Object 'Für Objekte mit regulären Ausdrücken (@Wird verwendet, um JoinColumn zu ersetzen.
    Set reg = CreateObject("VBScript.RegExp")  'Einstellungen für Objekte mit regulären Ausdrücken
    
    'Holen Sie sich den Pfad der Excel-Datei
    filePath = ThisWorkbook.Path
    'Holen Sie sich die Java-Datei in dieselbe Datei wie die Excel-Datei
    javaFile = Dir(filePath & "\*.java")
    
    'Öffnen Sie die Java-Dateien der Reihe nach und führen Sie die Verarbeitung aus
    Do While javaFile <> ""
    
        'Öffnen Sie eine Java-Datei und lesen Sie den Inhalt
        Set FSO = CreateObject("Scripting.FileSystemObject")
        With FSO.GetFile(filePath & "\" & javaFile).OpenAsTextStream
            replaceContent = .ReadAll
            .Close
        End With
        
        ' boolean → Boolean
        replaceContent = replace(replaceContent, "private boolean", "private Boolean")
        replaceContent = replace(replaceContent, "public boolean get", "public Boolean get")
        replaceContent = replace(replaceContent, "(boolean", "(Boolean")
        
        ' byte → Byte
        replaceContent = replace(replaceContent, "private byte", "private Byte")
        replaceContent = replace(replaceContent, "public byte get", "public Byte get")
        replaceContent = replace(replaceContent, "(byte", "(Byte")
        
        ' short → Short
        replaceContent = replace(replaceContent, "private short", "private Short")
        replaceContent = replace(replaceContent, "public short get", "public Short get")
        replaceContent = replace(replaceContent, "(short", "(Short")
        
        ' int → Integer
        replaceContent = replace(replaceContent, "private int", "private Integer")
        replaceContent = replace(replaceContent, "public int get", "public Integer get")
        replaceContent = replace(replaceContent, "(int", "(Integer")
        
        ' long → Long
        replaceContent = replace(replaceContent, "private long", "private Long")
        replaceContent = replace(replaceContent, "public long get", "public Long get")
        replaceContent = replace(replaceContent, "(long", "(Long")
        
        ' float → Float
        replaceContent = replace(replaceContent, "private float", "private Float")
        replaceContent = replace(replaceContent, "public float get", "public Float get")
        replaceContent = replace(replaceContent, "(float", "(Float")
        
        ' double → Double
        replaceContent = replace(replaceContent, "private double", "private Double")
        replaceContent = replace(replaceContent, "public double get", "public Double get")
        replaceContent = replace(replaceContent, "(double", "(Double")
        
        'Objekt → Zeichenfolge (gegen JSON-Typ; ohne Klassen für PK)
        If InStr(javaFile, "PK.java") = 0 Then
            replaceContent = replace(replaceContent, "private Object", "private String")
            replaceContent = replace(replaceContent, "public Object get", "public String get")
            replaceContent = replace(replaceContent, "(Object", "(String")
        End If
        
        ' @"Einfügbar" in JoinColumn= false, updatable ="Falsch" hinzugefügt
        reg.Pattern = "(.+?)@JoinColumn\((.+?)\)"
        reg.IgnoreCase = False
        reg.Global = True
        replaceContent = reg.replace(replaceContent, "$1@JoinColumn($2, insertable = false, updatable = false)")
        
        'Löschen Sie die Originaldatei und geben Sie die Datei aus, die den Inhalt nach dem Ersetzen beschreibt
        FSO.GetFile(filePath & "\" & javaFile).Delete
        FSO.CreateTextFile (filePath & "\" & javaFile)
        With FSO.GetFile(filePath & "\" & javaFile).OpenAsTextStream(8)
            .Write replaceContent
            .Close
        End With
        
        'Holen Sie sich die folgende Java-Datei
        javaFile = Dir
        
    Loop
    
End Sub

Zusatzinformationen

Änderungsprotokoll

--2020 / 06/17: Datentyp-Korrespondenztabelle hinzugefügt und einige Inhalte korrigiert --2020 / 06/19: Die Konvertierungsmethode von JSON zu Java-Objekt wurde hinzugefügt und zukünftige Probleme gelöscht. --2020 / 07/05: Verarbeitung hinzugefügt, die dem JPA-Fehler "Wiederholte Spalte bei der Zuordnung für Entität" entspricht, GitHub-Repository hinzugefügt

Referenz

■VBA

■MySQL

■Java

Recommended Posts

[VBA] Ich habe ein Tool erstellt, um den primitiven Typ der von Hibernate Tools generierten Entity-Klasse in den entsprechenden Referenztyp zu konvertieren.
[Java] Ich habe versucht, mit der Grabmethode ein Labyrinth zu erstellen ♪
Ich habe versucht, ein übergeordnetes Wertklasseobjekt in Ruby zu erstellen
Ich habe versucht, ein Tool zum Vergleichen von Amazon-Produktpreisen auf der ganzen Welt mit Java, der Amazon Product Advertising API und der Currency API (29.01.2017) zu erstellen.
Ich habe versucht, die Beispielanwendung gemäß der Idee des Buches "Micro Service Architecture" in einen Mikrodienst zu verwandeln.
Ich habe versucht, in Java von einer Zeichenfolge in einen LocalDate-Typ zu konvertieren
Ich habe einen RESAS-API-Client in Java erstellt
Ich habe versucht, mir zu erlauben, die Verzögerung für den Android UDP-Client einzustellen
Ich habe versucht, die Ergebnisse vor und nach der Date-Klasse mit einer geraden Zahl auszudrücken
Ich habe ein Tool erstellt, um den Unterschied zwischen CSV-Dateien auszugeben
Ich habe versucht, ein Beispielprogramm mit dem Problem des Datenbankspezialisten für domänengesteuertes Design zu erstellen
Ich habe versucht, den CPU-Kern mit Ruby voll auszunutzen
Ab Java9 werden Klassenkonstruktoren, die primitiven Typen entsprechen, als veraltet markiert.
So machen Sie https zum Schema der URL, die vom URL-Helfer von Rails generiert wurde
Eine Geschichte, als ich versuchte, ein Video zu erstellen, indem ich Processing und Resolume verknüpfte
Was ich versucht habe, als ich alle Felder einer Bohne bekommen wollte
Ich habe versucht, automatisch eine Klasse zu generieren, um sie mit APT von einer Datenklasse in ein Bundle zu konvertieren
Ich wurde von der Dunkelheit Romajis verschluckt, als ich versuchte, meinen Namen in Romaji umzuwandeln
[Kleine Geschichte] Ich habe versucht, die Java-ArrayList etwas komfortabler zu gestalten
Ich möchte rekursiv die Oberklasse und die Schnittstelle einer bestimmten Klasse erhalten
Auch wenn ich den Inhalt eines Datenobjekts in Java in JSON konvertieren möchte, gibt es einen Zirkelverweis ...
Machen Sie einen Rand links vom TextField
Ich habe versucht, ein Personalmanagement-Tool zu entwickeln
Ich habe versucht, eine Nachrichtenfunktion der Rails Tutorial-Erweiterung (Teil 1) zu erstellen: Erstellen Sie ein Modell
Ich habe versucht, den Mechanismus von Emscripten mit einem deutschen Löser zu untersuchen
Ich möchte eine Methode einer anderen Klasse aufrufen
05. Ich habe versucht, die Quelle von Spring Boot zu löschen
Ich habe versucht, die Kapazität von Spring Boot zu reduzieren
Ich habe versucht, eine Anmeldefunktion mit Java zu erstellen
Ich habe versucht, eine Antwortfunktion für die Rails Tutorial-Erweiterung (Teil 3) zu erstellen: Ein Missverständnis der Spezifikationen wurde behoben
[Java] Ich habe versucht, ein Janken-Spiel zu erstellen, das Anfänger auf der Konsole ausführen können
Ich habe versucht, eine Nachrichtenfunktion für die Erweiterung Rails Tutorial (Teil 2) zu erstellen: Erstellen Sie einen Bildschirm zum Anzeigen
Ich habe ein Rätsel ausprobiert, das nur von den unteren 10% der schlechten Ingenieure gelöst werden kann