[Spring Boot] Querydsl
8558 ワード
Querydsl? JPQL?
QuerydslはJPQLビルダー
JPQL:文字(ランタイムエラー)、Querydsl:コード(コンパイル時エラー)
JPQL:直接バインドパラメータ;Querydsl:自動処理パラメータバインド
JPAQueryFactory?
JPAQueryFactory queryFactory;
Query dslを使用したオブジェクトを作成!
条件生成=検索条件Yes.and() , . メソッドチェーンにor()を接続する
select+from=selectfromが使用可能
演算子の指定
member.username.eq("member1") // username = 'member1'
member.username.ne("member1") //username != 'member1'
member.username.eq("member1").not() // username != 'member1'
member.username.isNotNull() //이름이 is not null
member.age.in(10, 20) // age in (10,20)
member.age.notIn(10, 20) // age not in (10, 20)
member.age.between(10,30) //between 10, 30
member.age.goe(30) // age >= 30
member.age.gt(30) // age > 30
member.age.loe(30) // age <= 30
member.age.lt(30) // age < 30
member.username.like("member%") //like 검색
member.username.contains("member") // like ‘%member%’ 검색
member.username.startsWith("member") //like ‘m
Fetchタイプ
fetch():クエリーリスト、データがなければ空のリストを返す
fetchOne():シングルポイントクエリー
結果がない場合:null
結果が2つを超える場合:com.querydsl.core.NonUniqueResultException
fetchFirst() : limit(1).fetchOne()
fetchResults():ページング情報を含み、合計クエリーの追加を実行
fetchCount():countクエリーに変更してcountカウントを表示
*ソート・タイプ
desc()、asc():一般ソート
nullsLast()、nullsFirst():nullデータでソート
*サイン
join(別名として使用されるターゲットのQタイプ)
join(),innerJoin():内部結合(inner join)
左Join():左外部結合(左外部結合)
rightJoin():rigth外部結合(rigth outer join)
Fetch結合を提供してJPQLのonと性能を最適化する
3つのダチョウ-関連のないフィールドに接続します
=fromセクションで複数のエンティティを選択して、3つの他の結合を作成します.
「外部結合不可」で説明する結合onを使用して外部結合を行う
!!: onセクションを使用して結合ターゲットをフィルタする場合は、外部結合ではなく内部結合(inner join)を使用します。
whereセクションのフィルタ機能と同じです.従って、「ON」節を用いる連合ターゲットフィルタリングを行う場合、
この機能は、外部結合が必要な場合にのみ使用されます.
注意!
文法をよく見なければならない.左側の結合()セクションには、通常の結合とは異なり、1つのエンティティのみが含まれます.
一般結合:leftJoin(member.team,team)
on結合:from(member).leftJoin(team).on(xxx)
fromセクションのサブクエリー制限
JPA JPQLサブクエリの限界はfromセクションのサブクエリ(インラインビュー)をサポートしません.もちろんQuerydslです
支援もしない.Hypernetインプリメンテーションを使用すると、selectセクションのサブクエリがサポートされます.Querydsl図
仮想インプリメンテーションを使用してselectセクションのサブクエリをサポートします.
fromセクションのサブクエリーソリューション
Case文
select、条件セクション(where)、order byで使用可能
投影-何を取るかを決める!
1つのターゲット-タイプの決定
ターゲットメッシュ-調整可能またはDTOに設定
tuple-クエリーdsl複数のクエリー時に事前に作成されたタイプ
JPQL
純JPAでDTOを照会する場合はnewコマンドを使用する必要があります
DTOのパッケージ名は全て書かないといけないのでめちゃくちゃ
コンストラクション関数のみサポート
生成者はtypeを表示してアクセスする必要があります.
ExpressionUtils.as(source,alias):フィールドまたはサブクエリに別名を適用
username.as(「memberName」):フィールドに別名を適用
投影結果は仮定数を返します
1.Setter
2.field
3.Constructor
@QueryProjection
=使用を続けると、dtoはqファイルを生成することもできます.
=コンパイラを使用してタイプをチェックできるため、この方法が最も安全です.
-ダイナミッククエリー
1.boolean builderの使用
BooleanBuilder builder = new BooleanBuilder();
=>
サブクエリ
com.querydsl.jpa.JPA Expressionsの使用
マスター演算の変更、削除
=同じ演算を同時に処理
SQL関数の呼び出し
=SQL functionは、JPAなどのDialect登録のコンテンツのみを呼び出します.
純JPAリポジトリとQuerydsl
JPAQuery FactoryはSpringBinとして登録されており、注入して使用することができます
動的クエリーとパフォーマンス最適化クエリー-ジェネレータを使用してWHERE条件を使用
クエリーAPIコントローラの開発
インタフェースのサポート-Querydsl Predicatorアクチュエータ
3つの問題を作成するquerydsl文
<検証x>
team a, b,c//member1,2,3
作成者を作成する必要はありません
学校a、b、c/学生1、2、3、4
2.各学校の名前と各学校の学生の体重の平均、身長の平均
サブクエリ問題の作成
3.学生の中で一番体重が大きい学生の名前を記入してください
4.メンバーの平均年齢が最小メンバーに等しいシナリオクエリーの作成
.select(team.name, member.age.avg())
.from(member)
.join(member.team, team)
.groupBy(team.name)
.fetch();
.select(school.name, student.height.avg())
.from(student)
.join(school.student, student)
.groupBy(school.name)
.fetch();
.select(Student.studentname,
JPAExpressions
.select(StudentSub.weight.max()))
.from(studentSub)
.from(student)
.fetch(); 4.List result = queryFactory
.selectFrom(member)
.where(member.age.eq(
JPAExpressions
.select(memberSub.age.min())
.from(memberSub)
))
.fetch();
Reference
この問題について([Spring Boot] Querydsl), 我々は、より多くの情報をここで見つけました https://velog.io/@tjdud3550/Spring-Boot-Querydslテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol