SQL から Java クラスを生成する手順

CREATE TABLE 文を 1 つ以上貼り付け、「SQL → Java クラス」を押すと、テーブルごとに public クラスを生成します。列は private フィールドになり、各フィールドに getter と setter が付き、型に応じて java.math と java.time の import も追加されます。

解析するのは DDL の一部で、SQL 文法の全体ではありません。MySQL / PostgreSQL / SQL Server / Oracle / SQLite の列型、バッククォート・引用符・角括弧で囲んだ識別子、列コメント、テーブル制約に対応します。処理はこのタブ内で完結するため、外部に送れないスキーマでもここで変換できます。

  1. テキスト欄に CREATE TABLE 文を貼り付けるか、「サンプル」を押して主キー・インデックス・外部キー・列コメントを含むテーブルを読み込みます。
  2. 「SQL → Java クラス」を押すと、テーブルごとに 1 つのクラスを生成します。2 つのテーブルが同じクラス名になる場合は、後のクラス名に数字が付きます。
  3. 結果の上の状態表示を確認します。生成したクラス数とフィールド数、または生成しなかった理由(入力が空、CREATE TABLE がない、列のないテーブル)が表示されます。
  4. 「コピー」でクラスをエディターに取り込み、「クリア」で次のスキーマの前に入力欄を空にします。

生成されるクラスの中身

列型の対応

整数の幅はそのまま反映します。int / integer / smallint / mediumint / serial は int、bigint は long、tinyint(1) は boolean、それ以外の tinyint は int、unsigned の int は long、unsigned の bigint は BigInteger になります。float / real / double は double です。

decimal と numeric は精度とスケールで判定します。スケール 0 で 9 桁以下は int、18 桁以下は long、それ以外は BigDecimal になるため、decimal(10,2) は金額を丸める double ではなく BigDecimal です。char / varchar / text / json / xml / enum / set / uuid は String、date は LocalDate、time は LocalTime、datetime と timestamp は LocalDateTime、タイムゾーン付きは OffsetDateTime、bit(1) は boolean、bit(n) / binary / varbinary / blob 系は byte[] になります。判別できない型は推測せず Object にし、// unmapped SQL type と注記します。

除外・名前の変換・コメント

テーブル制約はフィールドにせず除外します。PRIMARY KEY (id) / KEY / UNIQUE / CONSTRAINT ... FOREIGN KEY / CHECK / INDEX の行は認識して読み飛ばし、列自身に付いた制約(id int PRIMARY KEY)はフィールドとして残します。--、#、/* */ のコメントは解析前に除去し、行末まで飲み込むコメントも同じです。文字列リテラル内の記号はそのまま残します。列の COMMENT 'buyer id' はフィールドの行末に // buyer id として付きます。

識別子の囲みは外します。`address_id`、"user name"、[order] は addressId、userName、order になります。snake_case は camelCase にし、Java の予約語には先頭にアンダースコアを付け(class は _class)、数字で始まる名前にも付けます(2fa は _2fa)。アクセサーではそのアンダースコアを外すため、setter は setClass になります。Java 名が SQL 名と異なる場合は // column: ... も付き、レビュー時に改名に気づけます。

プライバシー・サイズ・できないこと

変換はページ内で行い、処理中に通信は発生せず、スキーマはどこにも送信されません。120,000 文字までの結果はシンタックスハイライトし、それより大きいクラスはタブの反応を保つためプレーンテキストで表示します。このページの Chrome での実測では、500 列(Java 94 KB)はハイライトありで約 0.5 秒、1,000 列(188 KB)は約 30 ms、2,000 列(385 KB)は約 40 ms です。

生成物は出発点であり、ORM のマッピングではありません。JPA / Hibernate のアノテーション、Lombok、コンストラクター、equals / hashCode / toString、外部キーの関連、NULL 可否(NOT NULL 列の印)はいずれも付きません。プロジェクトに取り込む前に名前と型をスキーマと突き合わせてください。JSON のサンプルから作る場合は「JSON から Java クラス」のページを使ってください。

最近使ったツール: