Hibernate Outils qui peuvent créer instantanément la classe Entity correspondante en fonction de la définition de table et de la définition VIEW. C'est très pratique, mais par défaut, les types numériques sont créés en tant que types primitifs. Si la valeur DB peut contenir null, c'est NG. J'ai recherché un paramètre qui pourrait être converti dans le type de référence correspondant (null est acceptable contrairement au type primitif), mais il n'est pas sorti ... Si tel est le cas, il est plus rapide de le faire! J'ai donc créé un outil pour réaliser ce qui précède.
Comment créer une classe d'entité dans Hibernate Tools
Puisqu'il est décrit en détail dans, je vais l'omettre dans cet article.
Les types de données MySQL (ci-après, MySQL), les types de données Java générés par Hibernate Tools (ci-après, Hibernate Tools) et les types de référence correspondants sont les suivants. (Ce sera le résultat de l'exécution réelle des outils Hibernate.)
MySQL | HibernateTools(Java) | Type de référence correspondant(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 |
Étant donné que BigInteger et BigDecimal sont des types de référence, aucune conversion n'est requise, les types de référence correspondants ne sont donc pas écrits. Même dans ce cas, INTEGER est affiché en tant qu'Integer et BIGINT est sorti aussi longtemps, n'est-ce pas?
Sur la base de ce qui précède, j'ai créé le code VBA. (Il existe des conversions autres que le type numérique.)
python
Sub macro_for_entity_class_java()
Dim filePath As String 'Pour obtenir le chemin du fichier
Dim javaFile As String 'Pour l'acquisition de fichiers Java
Dim FSO As Object 'Pour le traitement des fichiers
Dim replaceContent As String 'Pour la conversion de chaînes de caractères
Dim reg As Object 'Pour les objets d'expression régulière (@Utilisé pour remplacer JoinColumn)
Set reg = CreateObject("VBScript.RegExp") 'Paramètres des objets d'expression régulière
'Obtenez le chemin du fichier Excel
filePath = ThisWorkbook.Path
'Récupérez le fichier Java dans le même fichier que le fichier Excel
javaFile = Dir(filePath & "\*.java")
'Ouvrez les fichiers Java dans l'ordre et exécutez le traitement
Do While javaFile <> ""
'Ouvrez un fichier Java et lisez le contenu
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")
'Object → String (par rapport au type JSON; à l'exclusion des classes pour 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
' @"Insérable" dans la colonne de jointure= false, updatable =Ajout de "faux"
reg.Pattern = "(.+?)@JoinColumn\((.+?)\)"
reg.IgnoreCase = False
reg.Global = True
replaceContent = reg.replace(replaceContent, "$1@JoinColumn($2, insertable = false, updatable = false)")
'Supprimez le fichier d'origine et sortez le fichier qui décrit le contenu après le remplacement
FSO.GetFile(filePath & "\" & javaFile).Delete
FSO.CreateTextFile (filePath & "\" & javaFile)
With FSO.GetFile(filePath & "\" & javaFile).OpenAsTextStream(8)
.Write replaceContent
.Close
End With
'Obtenez le fichier Java suivant
javaFile = Dir
Loop
End Sub
--2020 / 06/17: Ajout d'une table de correspondance des types de données et correction de certains contenus --2020 / 06/19: Ajout de la méthode de conversion de JSON en objet Java et suppression des futurs problèmes. --2020 / 07/05: Ajout du traitement correspondant à l'erreur "Colonne répétée dans le mappage pour l'entité" de JPA, ajout du référentiel GitHub
■VBA
■MySQL
■Java
Recommended Posts