最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring Data JPA 整合QueryDSL的使用案例

 更新時間:2023年08月16日 10:52:28   作者:寧漂打工仔  
QueryDSL 是一個用于構建類型安全的 SQL 查詢的 Java 庫,它的主要目標是簡化在 Java 中構建和執(zhí)行 SQL 查詢的過程,同時提供類型安全性和更好的編碼體驗,對Spring Data JPA 整合QueryDSL使用案例感興趣的朋友跟隨小編一起看看吧

QueryDSL是什么?

QueryDSL 是一個用于構建類型安全的 SQL 查詢的 Java 庫。它的主要目標是簡化在 Java 中構建和執(zhí)行 SQL 查詢的過程,同時提供類型安全性和更好的編碼體驗。QueryDSL 可以與許多關系型數據庫一起使用,如 MySQL、PostgreSQL、Oracle 等。QueryDSL 提供了一種以編程方式構建查詢的方式,它使用了 Fluent API 風格的鏈式調用,使得查詢語句更易讀、易寫,并且能夠在編譯時捕獲一些常見的錯誤。它還提供了代碼生成工具,可以生成查詢實體、屬性和查詢類型的元數據,從而增強了代碼的類型安全性。

  • 類型安全性:通過使用 Java 編程語言,QueryDSL 提供了編譯時的類型安全性,避免了運行時錯誤。
  • Fluent API:QueryDSL 的 API 設計使得查詢可以使用鏈式調用,提高了代碼的可讀性。
  • 支持多種查詢類型:QueryDSL 支持查詢、更新和刪除操作,并且提供了豐富的表達式操作符和函數。
  • 支持關聯查詢:可以在查詢中輕松地處理實體之間的關聯關系,包括一對一、一對多、多對一和多對多等。
  • 支持 JPA 和 SQL:QueryDSL 可以與 JPA(Java Persistence API)和 SQL 一起使用,適用于不同的持久化框架和數據庫。
  • 代碼生成工具:QueryDSL 提供了代碼生成工具,可以生成查詢實體和屬性的元數據,幫助提高代碼的可維護性。

maven配置

      <dependency>
            <groupId>com.querydsl</groupId>
            <artifactId>querydsl-jpa</artifactId>
            <version>${querydsl.version}</version>
            <classifier>jakarta</classifier>
        </dependency>
        <dependency>
            <groupId>com.querydsl</groupId>
            <artifactId>querydsl-apt</artifactId>
            <version>${querydsl.version}</version>
            <scope>provided</scope>
            <classifier>jakarta</classifier>
        </dependency>
 <querydsl.version>5.0.0</querydsl.version>
<build>
        <finalName>${project.artifactId}</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <!-- query dsl build Q Entity -->
            <plugin>
                <groupId>com.mysema.maven</groupId>
                <artifactId>apt-maven-plugin</artifactId>
                <version>1.1.3</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>process</goal>
                        </goals>
                        <configuration>
                            <!--<outputDirectory>target/generated-sources/java</outputDirectory>-->
                            <processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

需執(zhí)行 maven clean install

配置類

import com.querydsl.jpa.impl.JPAQueryFactory;
import jakarta.persistence.EntityManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
 * @author Wang
 */
@Configuration
public class JpaQueryConfig {
    @Bean
    public JPAQueryFactory jpaQuery(EntityManager entityManager) {
        return new JPAQueryFactory(entityManager);
    }
}

使用案例

import com.querydsl.core.types.Projections;
import com.querydsl.jpa.impl.JPAQueryFactory;
import com.woodare.cdw.core.Cons;
import com.woodare.cdw.jpa.data.SecondaryInvitingData;
import com.woodare.cdw.jpa.entity.QAccountEntity;
import com.woodare.cdw.jpa.entity.QBoatEntity;
import com.woodare.cdw.jpa.entity.QSecondaryInvitingEntity;
import com.woodare.cdw.jpa.entity.SecondaryInvitingEntity;
import com.woodare.cdw.jpa.enumdata.DeleteStateEnum;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.List;
/**
 * @author Wang
 */
@RequiredArgsConstructor
@Service
public class SecondaryInvitingDsl {
    final JPAQueryFactory queryFactory;
    public List<SecondaryInvitingData> findSecondaryInvitingByBoatId(String boatId) {
        QSecondaryInvitingEntity secondaryInvitingEntity = QSecondaryInvitingEntity.secondaryInvitingEntity;
        QAccountEntity accountEntity = QAccountEntity.accountEntity;
        return queryFactory.select(
                        Projections.bean(SecondaryInvitingData.class,
                                secondaryInvitingEntity.id,
                                secondaryInvitingEntity.accountId,
                                secondaryInvitingEntity.secondaryAccountId,
                                secondaryInvitingEntity.status,
                                secondaryInvitingEntity.inviteDate,
                                secondaryInvitingEntity.respondDate,
                                secondaryInvitingEntity.deleteDate,
                                secondaryInvitingEntity.permissions,
                                secondaryInvitingEntity.secondaryFirstName,
                                secondaryInvitingEntity.secondaryLastName,
                                secondaryInvitingEntity.secondaryEmail,
                                secondaryInvitingEntity.deleteBy,
                                accountEntity.avatar
                        ))
                .from(secondaryInvitingEntity)
                .leftJoin(accountEntity)
                .on(secondaryInvitingEntity.secondaryAccountId.eq(accountEntity.id))
                .where(
                        secondaryInvitingEntity.boatId.eq(boatId),
                        secondaryInvitingEntity.deleteState.eq(DeleteStateEnum.VALID.getValue())
                )
                .orderBy(secondaryInvitingEntity.createDate.desc())
                .fetch();
    }
    /**
     * CN 根據被邀人郵箱查詢邀請記錄, 并關聯boatName
     *
     * @param secondaryEmail secondaryEmail
     * @param status         status
     * @return List<SecondaryInvitingData>
     */
    public List<SecondaryInvitingData> findListBySecondaryUser(String secondaryEmail, String status) {
        QSecondaryInvitingEntity secondaryInvitingEntity = QSecondaryInvitingEntity.secondaryInvitingEntity;
        QBoatEntity boatEntity = QBoatEntity.boatEntity;
        return queryFactory.select(
                        Projections.bean(SecondaryInvitingData.class,
                                secondaryInvitingEntity.id,
                                secondaryInvitingEntity.accountId,
                                secondaryInvitingEntity.secondaryAccountId,
                                secondaryInvitingEntity.status,
                                secondaryInvitingEntity.inviteDate,
                                secondaryInvitingEntity.respondDate,
                                secondaryInvitingEntity.deleteDate,
                                secondaryInvitingEntity.permissions,
                                secondaryInvitingEntity.secondaryFirstName,
                                secondaryInvitingEntity.secondaryLastName,
                                secondaryInvitingEntity.secondaryEmail,
                                secondaryInvitingEntity.deleteBy,
                                boatEntity.boatName
                        ))
                .from(secondaryInvitingEntity)
                .leftJoin(boatEntity)
                .on(secondaryInvitingEntity.boatId.eq(boatEntity.id))
                .where(
                        secondaryInvitingEntity.secondaryEmail.eq(secondaryEmail),
                        secondaryInvitingEntity.status.eq(status),
                        secondaryInvitingEntity.deleteState.eq(DeleteStateEnum.VALID.getValue()),
                        boatEntity.deleteState.eq(DeleteStateEnum.VALID.getValue())
                )
                .orderBy(secondaryInvitingEntity.createDate.desc())
                .fetch();
    }
    /**
     * CN 根據被邀人郵箱, 主邀人用戶id查詢邀請記錄, 排除expire狀態(tài)
     *
     * @param secondaryEmail secondaryEmail
     * @param accountId         accountId
     * @return List<SecondaryInvitingData>
     */
    public List<SecondaryInvitingEntity> findListBySecondaryEmailAndAccountId(String secondaryEmail, String accountId) {
        QSecondaryInvitingEntity secondaryInvitingEntity = QSecondaryInvitingEntity.secondaryInvitingEntity;
        return queryFactory.select(secondaryInvitingEntity)
                .from(secondaryInvitingEntity)
                .where(
                        secondaryInvitingEntity.secondaryEmail.eq(secondaryEmail),
                        secondaryInvitingEntity.accountId.eq(accountId),
                        secondaryInvitingEntity.status.ne(Cons.InvitingStatus.EXPIRED)
                )
                .orderBy(secondaryInvitingEntity.createDate.desc())
                .fetch();
    }
}
import cn.hutool.core.util.StrUtil;
import com.querydsl.core.BooleanBuilder;
import com.querydsl.jpa.impl.JPAQueryFactory;
import com.woodare.cdw.jpa.entity.QSensorSortEntity;
import com.woodare.cdw.jpa.entity.SensorSortEntity;
import com.woodare.cdw.jpa.enumdata.DeleteStateEnum;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.List;
/**
 * @author Wang
 */
@RequiredArgsConstructor
@Service
public class SensorSortDsl {
    final JPAQueryFactory queryFactory;
    public List<SensorSortEntity> findSensorSortList(String sirenDeviceId) {
        QSensorSortEntity sensorSortEntity = QSensorSortEntity.sensorSortEntity;
        return queryFactory.selectFrom(sensorSortEntity)
                .where(
                        sensorSortEntity.sirenDeviceId.eq(sirenDeviceId)
                )
                .orderBy(sensorSortEntity.parentType.asc(), sensorSortEntity.childrenType.desc())
                .fetch();
    }
    public void deleteByParam(String sirenDeviceId, String parentType, String childrenType) {
        QSensorSortEntity sensorSortEntity = QSensorSortEntity.sensorSortEntity;
        BooleanBuilder condition = new BooleanBuilder();
        if (StrUtil.isNotBlank(sirenDeviceId)) {
            condition.and(sensorSortEntity.sirenDeviceId.eq(sirenDeviceId));
        }
        if (StrUtil.isNotBlank(parentType)) {
            condition.and(sensorSortEntity.parentType.eq(parentType));
        }
        if (StrUtil.isNotBlank(childrenType)) {
            condition.and(sensorSortEntity.childrenType.eq(childrenType));
        }
        queryFactory.update(sensorSortEntity)
                .set(sensorSortEntity.deleteState, DeleteStateEnum.DELETE.getValue())
                .where(condition)
                .execute();
    }
}

到此這篇關于Spring Data JPA 整合QueryDSL的文章就介紹到這了,更多相關Spring Data JPA 整合QueryDSL內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java中Arrays.sort自定義一維數組、二維數組的排序方式

    Java中Arrays.sort自定義一維數組、二維數組的排序方式

    這篇文章主要介紹了Java中Arrays.sort自定義一維數組、二維數組的排序方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • SpringBoot實現版本升級到2.7.18

    SpringBoot實現版本升級到2.7.18

    這篇文章主要介紹了SpringBoot實現版本升級到2.7.18全過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Java多線程之多種鎖和阻塞隊列

    Java多線程之多種鎖和阻塞隊列

    今天帶大家學習的是Java多線程的相關知識,文章圍繞著java多種鎖和阻塞隊列展開,文中有非常詳細的介紹,需要的朋友可以參考下
    2021-06-06
  • Java8 Lambda表達式詳解及實例

    Java8 Lambda表達式詳解及實例

    這篇文章主要介紹了Java8 Lambda表達式詳解的相關資料,需要的朋友可以參考下
    2016-09-09
  • Spring Boot Actuator監(jiān)控器配置及使用解析

    Spring Boot Actuator監(jiān)控器配置及使用解析

    這篇文章主要介紹了Spring Boot Actuator監(jiān)控器配置及使用解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07
  • 關于jdk環(huán)境變量的配置方式解讀

    關于jdk環(huán)境變量的配置方式解讀

    這篇文章主要介紹了關于jdk環(huán)境變量的配置方式解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • 解決springboot bean中大寫的字段返回變成小寫的問題

    解決springboot bean中大寫的字段返回變成小寫的問題

    這篇文章主要介紹了解決springboot bean中大寫的字段返回變成小寫的問題,具有很好的參考價值希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • Windows下java、javaw、javaws以及jvm.dll等進程的區(qū)別

    Windows下java、javaw、javaws以及jvm.dll等進程的區(qū)別

    這篇文章主要介紹了Windows下java、javaw、javaws以及jvm.dll等進程的區(qū)別,本文分別講解了它們的作用并給出代碼實例,最后做出了區(qū)別總結,需要的朋友可以參考下
    2015-03-03
  • Feign的原理及概念詳解

    Feign的原理及概念詳解

    文章介紹了Feign,一個聲明式、模板化的HTTP客戶端,以及其在Spring Cloud中的增強,Feign通過代理類簡化HTTP請求的調用,并提供了詳細的調用流程、優(yōu)化配置和架構說明,幫助開發(fā)者更方便地進行服務調用和管理
    2025-11-11
  • Java顯式鎖詳情

    Java顯式鎖詳情

    這篇文章主要詳細的介紹了shenJava顯式鎖常用的api及標準用法,感興趣的朋友,需要的朋友可以參考下面文章里的內容
    2021-09-09

最新評論

淳化县| 安龙县| 军事| 凉山| 穆棱市| 新密市| 建瓯市| 东宁县| 西丰县| 乐亭县| 陆良县| 武功县| 汤阴县| 淮南市| 那曲县| 琼结县| 淮北市| 黎城县| 保德县| 五家渠市| 南京市| 温州市| 邵阳县| 无锡市| 中江县| 延长县| 清水河县| 泸州市| 尼玛县| 灵台县| 襄樊市| 弋阳县| 扬州市| 桐梓县| 神木县| 偏关县| 浦东新区| 隆回县| 武鸣县| 温宿县| 廉江市|