queryDsl初学
生活随笔
收集整理的這篇文章主要介紹了
queryDsl初学
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
本文主要介紹springboot + jpa + query dsl的一系列操作,沒有query dsl 產(chǎn)品簡介。是一個(gè)通用的查詢框架,專注于通過Java API構(gòu)建類型安全的SQL查詢。說的直白點(diǎn)就是用Java 代碼寫sql 。
附上官網(wǎng)文檔鏈接
http://www.querydsl.com/static/querydsl/4.2.1/reference/html_single/
1、新建一個(gè)springboot + jpa 項(xiàng)目
這個(gè)不多說,都會(huì)的。我使用的是postgresql 數(shù)據(jù)庫,換成mysql 或其他也可以。
2、引入query dsl 的maven依賴
3、各種sql組合嘗試
1.簡單組合
// 兩種寫法 // fetchOne查詢一條,當(dāng)匹配到兩條數(shù)據(jù)時(shí)會(huì)報(bào)錯(cuò)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 后面會(huì)拼接一個(gè) (limit 1),在多個(gè)結(jié)果中只查詢一條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;// 查詢條件,用逗號(hào)也表示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.動(dòng)態(tài)添加查詢條件(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 初始化需要賦值 ,給一個(gè) 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.動(dòng)態(tài)添加查詢條件(排序條件)
// 此處可進(jìn)行動(dòng)態(tài)處理 /*desc = qStudent.studentName.desc();desc = qStudent.studentAge.desc();*/// nullsFirst 空值放在第一個(gè), 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中可包含多個(gè)條件 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.動(dòng)態(tài)添加查詢條件(使用子查詢)
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
總結(jié)
以上是生活随笔為你收集整理的queryDsl初学的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Splay初步【bzoj1503】
- 下一篇: 专利申请书的书写和cpc客户端的使用