日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

queryDsl初学

發布時間:2023/12/20 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 queryDsl初学 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
本文主要介紹springboot + jpa + query dsl的一系列操作,沒有query dsl 產品簡介。是一個通用的查詢框架,專注于通過Java API構建類型安全的SQL查詢。說的直白點就是用Java 代碼寫sql 。

附上官網文檔鏈接

http://www.querydsl.com/static/querydsl/4.2.1/reference/html_single/

1、新建一個springboot + jpa 項目

這個不多說,都會的。我使用的是postgresql 數據庫,換成mysql 或其他也可以。

2、引入query dsl 的maven依賴

3、各種sql組合嘗試

1.簡單組合

// 兩種寫法 // fetchOne查詢一條,當匹配到兩條數據時會報錯jpaQueryFactory.selectFrom(qStudent).where(qStudent.studentName.eq(studentName)).fetchOne(); // sql:select student0_.student_id as student_1_0_, student0_.student_address as student_2_0_, student0_.student_age as student_3_0_, student0_.student_name as student_4_0_, student0_.student_sex as student_5_0_ from td_student student0_ where student0_.student_name='小明';// fetchFirst 后面會拼接一個 (limit 1),在多個結果中只查詢一條jpaQueryFactory.selectFrom(qStudent).where(qStudent.studentName.eq(studentName)).fetchFirst(); // sql:select student0_.student_id as student_1_0_, student0_.student_address as student_2_0_, student0_.student_age as student_3_0_, student0_.student_name as student_4_0_, student0_.student_sex as student_5_0_ from td_student student0_ where student0_.student_name='小明' limit 1;// 查詢條件,用逗號也表示and jpaQueryFactory.selectFrom(qStudent).where(qStudent.studentAge.eq(studentAge), qStudent.studentName.eq(studentName)).fetch(); // sql:select student0_.student_id as student_1_2_, student0_.student_address as student_2_2_, student0_.student_age as student_3_2_, student0_.student_name as student_4_2_, student0_.student_sex as student_5_2_ from td_student student0_ where student0_.student_age=18 and student0_.student_name='張三';jpaQueryFactory.selectFrom(qStudent) .where(qStudent.studentAge.eq(studentAge).and(qStudent.studentName.eq(studentName))).fetch(); // sql:select student0_.student_id as student_1_2_, student0_.student_address as student_2_2_, student0_.student_age as student_3_2_, student0_.student_name as student_4_2_, student0_.student_sex as student_5_2_ from td_student student0_ where student0_.student_age=18 and student0_.student_name='張三';

2.動態添加查詢條件(where條件)

BooleanBuilder booleanBuilder = new BooleanBuilder(); if (studentAge != null){booleanBuilder.and(qStudent.studentAge.eq(studentAge)); } if (StringUtils.hasText(studentName)){booleanBuilder.and(qStudent.studentName.eq(studentName)); } jpaQueryFactory.selectFrom(qStudent).where(booleanBuilder).fetch(); // sql: select student0_.student_id as student_1_2_, student0_.student_address as student_2_2_, student0_.student_age as student_3_2_, student0_.student_name as student_4_2_, student0_.student_sex as student_5_2_ from td_student student0_ where student0_.student_age=18 and student0_.student_name='張三';// Predicate 初始化需要賦值 ,給一個 1=1的條件 Predicate predicate = qStudent.studentId.isNotNull(); if (studentAge != null){predicate = ExpressionUtils.and(predicate, qStudent.studentAge.eq(studentAge)); } if (StringUtils.hasText(studentName)){predicate = ExpressionUtils.and(predicate, qStudent.studentName.eq(studentName)); } jpaQueryFactory.selectFrom(qStudent).where(booleanBuilder).fetch(); // sql: select student0_.student_id as student_1_2_, student0_.student_address as student_2_2_, student0_.student_age as student_3_2_, student0_.student_name as student_4_2_, student0_.student_sex as student_5_2_ from td_student student0_ where student0_.student_age=18 and student0_.student_name='張三';

3.動態添加查詢條件(排序條件)

// 此處可進行動態處理 /*desc = qStudent.studentName.desc();desc = qStudent.studentAge.desc();*/// nullsFirst 空值放在第一個, nullsLast()空值放在最后 OrderSpecifier desc = qStudent.studentName.desc().nullsFirst(); jpaQueryFactory.selectFrom(qStudent).orderBy(desc).fetch(); // sql: select student0_.student_id as student_1_2_, student0_.student_address as student_2_2_, student0_.student_age as student_3_2_, student0_.student_name as student_4_2_, student0_.student_sex as student_5_2_ from td_student student0_ order by student0_.student_name desc nulls first;;// orderBy中可包含多個條件 desc = qStudent.studentName.desc().nullsLast(); jpaQueryFactory.selectFrom(qStudent).orderBy(desc, qStudent.studentId.asc()).fetch(); // sql: select student0_.student_id as student_1_2_, student0_.student_address as student_2_2_, student0_.student_age as student_3_2_, student0_.student_name as student_4_2_, student0_.student_sex as student_5_2_ from td_student student0_ order by student0_.student_name desc nulls last, student0_.student_id asc;

4.動態添加查詢條件(使用子查詢)

JPQLQuery where = JPAExpressions.select(qStudent.studentId).from(qStudent).where(qStudent.studentName.eq(studentName)); jpaQueryFactory.selectFrom(qStudent).where(qStudent.studentId.in(where)).fetch(); // sql: select student0_.student_id as student_1_2_, student0_.student_address as student_2_2_, student0_.student_age as student_3_2_, student0_.student_name as student_4_2_, student0_.student_sex as student_5_2_ from td_student student0_ where student0_.student_id in (select student1_.student_id from td_student student1_ where student1_.student_name='張三');

查詢中的其他操作:

常用操作地址
https://blog.csdn.net/weixin_43826336/article/details/98945400

總結

以上是生活随笔為你收集整理的queryDsl初学的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。