Comment générer une classe Java à partir de SQL

Collez une ou plusieurs instructions CREATE TABLE puis cliquez sur « Convertir en classe Java ». Chaque table devient une classe public : un champ private par colonne, un getter et un setter pour chaque champ, et les imports java.math et java.time nécessaires aux types retenus.

L’analyse couvre une partie documentée du DDL, pas toute la grammaire SQL : types de colonnes MySQL, PostgreSQL, SQL Server, Oracle et SQLite, identifiants entre accents graves, guillemets ou crochets, commentaires de colonne et contraintes de table. Tout se passe dans cet onglet : un schéma que vous n’avez pas le droit de téléverser peut donc être converti ici.

  1. Collez l’instruction CREATE TABLE dans la zone de texte ou cliquez sur « Exemple » pour charger une table avec clé primaire, index, clé étrangère et commentaires de colonne.
  2. Cliquez sur « Convertir en classe Java ». Une classe est produite par table ; si deux tables donnent le même nom de classe, la seconde reçoit un suffixe numérique.
  3. Lisez la ligne d’état au-dessus du résultat : elle indique le nombre de classes et de champs, ou explique pourquoi rien n’a été produit (entrée vide, aucune instruction CREATE TABLE, table sans colonnes).
  4. Cliquez sur « Copier » pour emporter la classe dans votre éditeur, puis sur « Effacer » pour vider la zone avant le schéma suivant.

Ce que contient la classe générée

Comment les types de colonnes sont convertis

Les largeurs entières sont respectées : int, integer, smallint, mediumint et serial donnent int, bigint donne long, tinyint(1) donne boolean et les autres tinyint donnent int, un int unsigned donne long et un bigint unsigned donne BigInteger. float, real et double donnent double.

decimal et numeric sont lus selon la précision et l’échelle : échelle 0 jusqu’à 9 chiffres donnent int, jusqu’à 18 chiffres long, le reste BigDecimal — decimal(10,2) devient donc BigDecimal et non un double qui arrondirait des montants. char, varchar, text, json, xml, enum, set et uuid donnent String ; date, time, datetime et timestamp donnent LocalDate, LocalTime, LocalDateTime ou, avec fuseau horaire, OffsetDateTime ; bit(1) donne boolean et bit(n), binary, varbinary ainsi que la famille blob donnent byte[]. Un type non reconnu donne Object avec la note // unmapped SQL type, jamais une supposition silencieuse.

Ce qui est ignoré, renommé ou commenté

Les contraintes de table sont écartées au lieu de devenir des champs : PRIMARY KEY (id), KEY, UNIQUE, CONSTRAINT ... FOREIGN KEY, CHECK et INDEX sont reconnues et ignorées, alors qu’une colonne portant sa propre contrainte — id int PRIMARY KEY — reste un champ. Les commentaires --, # et /* */ sont retirés avant l’analyse, y compris lorsqu’ils occuperaient la fin de la ligne, et les marqueurs situés dans une chaîne littérale sont préservés. Un COMMENT 'buyer id' de colonne est recopié sur le champ sous forme de note // buyer id.

Les identifiants perdent leurs délimiteurs : `address_id`, "user name" et [order] deviennent addressId, userName et order. snake_case devient camelCase, un nom réservé par Java reçoit un souligné initial (class devient _class) et un nom commençant par un chiffre aussi (2fa devient _2fa) ; l’accesseur supprime ce souligné, le setter est donc setClass. Quand le nom Java diffère du nom SQL, le champ porte en plus la note // column: ..., ce qui garde le renommage visible pendant la relecture.

Confidentialité, taille et limites

La conversion se fait dans la page : pendant le travail, aucun appel réseau n’est effectué et le schéma n’est envoyé nulle part. Les résultats jusqu’à 120 000 caractères sont colorés ; une classe plus longue est affichée en texte brut pour que l’onglet reste réactif. Mesuré dans Chrome sur cette page : 500 colonnes (94 Ko de Java) demandent environ une demi-seconde avec coloration, 1 000 colonnes (188 Ko) environ 30 ms et 2 000 colonnes (385 Ko) environ 40 ms sans coloration.

Le résultat est un point de départ, pas un mapping ORM : aucune annotation JPA ou Hibernate, pas de Lombok, pas de constructeur, equals, hashCode ni toString, aucune relation de clé étrangère et aucune nullabilité — une colonne NOT NULL n’est pas signalée. Vérifiez noms et types sur le schéma avant d’intégrer la classe à un projet ; pour un exemple JSON, utilisez la page JSON vers classe Java.

Outils récents :