Querydsl 、jOOQ、JEQUEL、activejdbc、iciqlなど、Javaで使用できるさまざまなQueryDSLライブラリ間のパフォーマンス比較に関するリソースを教えてもらえますか。
背景: Spring JDBCテンプレートを使用していますが、それでもクエリをプレーンな文字列形式で記述する必要がありました。直接クエリの記述に問題はありませんが、DBテーブル名に直接依存しているのではないかと心配しています。HibernateやJPA/EclipseLinkのようなORMフレームワークは使いたくありません。可能な限り高い生のパフォーマンスが必要です(IMO、CRUD中心のアプリケーションに適しています)。これらのDSLのオーバーヘッドは、それが少しの場合にのみ余裕があります(ほとんどの場合、StringBuilder / Stringの連結になると思います!)
一部のxmlで外部化された名前付きクエリの使用を検討しました。しかし、さまざまなクエリDSLライブラリが提供する価値を評価しようとしているだけです。
編集:私の要件の詳細: APIメソッドを使用して適度に複雑なクエリを構築する場合のこれらのパフォーマンスの比較を知りたいです。必要なのは、これらのクエリDSLライブラリのいずれかを使用してクエリ文字列を生成し、それをSpringJDBCテンプレートに渡すことだけです。したがって、この中間ステップを追加するとパフォーマンスが大幅に低下するかどうかを知りたいので、名前付きクエリを使用するか、StingBuilderまたは同様のアプローチを使用する独自のライブラリを構築します。
jOOQ、iciql、QueryDSLでの私の経験を更新してください:
元の投稿でこれについて言及しなかったものの、エンティティクラスで必要な使いやすさとオーバーヘッド(追加のアノテーションや実装が必要な場合など)にも熱心です。
jOOQ:
- エンティティのプロパティをライブラリ固有の方法に変更する必要があります
- SQLクエリ文字列を返すことができます
Iciql:
- エンティティは変更なしまたはほとんど変更なしでマッピングできます(合計3つの方法を使用してマッピングできます)
- ただし、クエリの選択のみに制限されます(更新/削除/ ...の場合は、エンティティを再度変更する必要があります)
QueryDSL:
- エンティティをテーブルにバインドする複数の方法(ライブラリ固有の方法以外で、JPAアノテーションの使用がサポートされています)。しかし、少なくともエンティティを変更する必要があります
- クエリ文字列を取得する簡単な/直接的な方法はありません
(すべての観察結果は、私がこれらについて知っている知識がほとんどありません。これらのいずれかが正しくない場合は、修正してください)
上記のすべてで、私は名前付きクエリを書くことに固執しています:(しかし、Lukas Ederの回答は私の元の投稿の懸念(パフォーマンス)について説明しているようですので、私は彼を受け入れました。