mcpField
J
jimmer-orm

jimmer-orm

github.com/coooolfan開発652 回インストール5 週間前に更新
リポジトリ

jimmer-orm について

Jimmer ORM でのエンティティ定義やクエリ作成を支援する、Kotlin および Java 開発者向けスキルです。インターフェースベースの不変エンティティと、動的な述語や結合を扱う型安全な DSL を重視します。

主な機能

  1. 01インターフェース型不変エンティティの指針
  2. 02Kotlin 専用 API の案内
  3. 03型安全な SQL DSL クエリ
  4. 04動的な述語とテーブル結合
  5. 05関連マッピングとアノテーション
  6. 06エンティティ、DTO、クエリの資料

活用シーン

  1. 01Jimmer のエンティティインターフェースを定義
  2. 02エンティティ関連とデータベース列をマッピング
  3. 03条件付き述語でクエリを作成
  4. 04エンティティを返す API の投影を選択

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/coooolfan/unirhy --skill jimmer-orm

インストール後、Claude Code で/jimmer-ormを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

assets/
EntityTemplate.kt
references/
dsl-queries.md
dto.md
entity-mapping.md

詳細

事実の根拠

現在のコンテキストで Jimmer プロジェクトのソースコードのローカルパスが指定されている場合は、ソースコードの実装を基準にしてください。それ以外の理由で Jimmer の具体的な実装を確認する必要がある場合は、コードリポジトリ https://github.com/babyfish-ct/jimmer を参照してください。

コアコンセプト

エンティティ定義の特徴
  • class ではなく interface でエンティティを定義します
  • エンティティは動的オブジェクトであり、不変オブジェクトです
  • getter のみを持ち、setter はありません
  • KSP(Kotlin)または AnnotationProcessor(Java)によって、コンパイル時に実装が生成されます
  • プロパティが未設定であることは、null であることを意味しません
DSL クエリの特徴
  • コンパイル時の安全性を保証する、強い型付けの SQL DSL です
  • 動的述語:パラメーターに応じて SQL 条件を追加するかどうかを決定します
  • 動的テーブル結合:未使用の結合は自動的に無視され、競合する結合は自動的に統合されます
  • 暗黙的なサブクエリ:コレクション関連に基づいてサブクエリを作成し、親子の関連条件を自動的に生成します

言語の選択

Jimmer は Kotlin 向けに特化した API スタイルを提供しています

  • エンティティマッピング: references/entity-mapping.md を参照してください
  • DSL クエリ: references/dsl-queries.md を参照してください
  • エンティティテンプレート: assets/EntityTemplate.kt を参照してください

主要アノテーション早見表

  • @Entity - エンティティ型を指定します
  • @MappedSuperclass - マッピングされた親インターフェースを指定し、共通フィールドを再利用します
  • @Embeddable - 埋め込み値オブジェクトを指定します
  • @Id - 主キーを指定します
  • @GeneratedValue - 主キーの生成戦略を指定します
  • @Key - ビジネスキーを指定します
  • @ManyToOne / @OneToMany / @ManyToMany / @OneToOne - 関連マッピングを指定します
  • @ManyToManyView - 中間エンティティを介して多対多ビューを公開します
  • @IdView - 関連 ID ビューを指定します
  • @JoinColumn - 外部キー列名をカスタマイズします
  • @JoinTable - 中間テーブルをカスタマイズします
  • @Column - 列名をカスタマイズします(関連フィールド以外にのみ使用)
  • @Table - テーブル名をカスタマイズします
  • @Version - 楽観ロックのバージョンフィールドを指定します
  • @LogicalDeleted - 論理削除フィールドを指定します
  • @Formula / @Transient - 計算プロパティを指定します
  • ?(Kotlin)- null 許容プロパティを指定します

命名規則

  • エンティティ名 → テーブル名:BookStore → BOOK_STORE
  • プロパティ名 → 列名:firstName → FIRST_NAME
  • 多対一の外部キー:store → STORE_ID

ワークフロー

  1. エンティティを定義するとき:

    • class ではなく interface を使用します
    • プロジェクトの言語に応じたエンティティテンプレートとマッピングドキュメントを参照します
    • 中間テーブルに順序、時刻、出典などの業務フィールドがある場合は、中間エンティティを定義し、@ManyToManyView で読み取り専用の多対多ビューを公開します
    • 外部キーで直接クエリする、または input に書き込む必要がある場合は、関連に @IdView を追加することを優先します
    • assets/EntityTemplate.kt と references/entity-mapping.md を参照します
    • DTO の定義については references/dto.md を参照します
  2. クエリを記述するとき:

    • 動的述語を優先して使用します(Kotlin:`ilike?`/`between?`/`valueIn?`)
    • 単一値の関連クエリには動的テーブル結合を使用します
    • コレクション JOIN による結果の重複やページネーションの無効化を避けるため、コレクション関連には暗黙的なサブクエリを使用します
    • API がエンティティを返す場合は、fetcher/DTO を使用して投影を制御し、デフォルトのシリアライズ形式に依存しないでください
    • プロジェクトの言語に応じた DSL クエリドキュメントを参照します
    • references/dsl-queries.md を参照します
  3. 問題が発生したとき:

    • エンティティが interface で定義されているか確認します
    • 関連マッピングの mappedBy 設定を確認します
    • 動的述語のパラメーターが正しいか確認します
    • テーブル結合のパスが正しいことを確認します

コメント