Spring Date JPA -自定义操作(Querydsl)

Querydsl

https://querydsl.com/ QueryDsl文档

QueryDSL是基于ORM框架或SQL平台上的一个通用查询框架。借助QueryDSL可以在任何支持的ORM框架或SQL平台
上以通用API方式构建查询。 JPA是QueryDSL的主要集成技术,是JPQL和Criteria查询的代替方法。目前QueryDSL支持的平台包括 JPA,JDO,SQL,Mongodb 等等。。。

Querydsl扩展能让我们以链式方式代码编写查询方法。该扩展需要一个接口QueryDslPredicateExecutor,它定义了很 多查询方法。

接口继承了该接口,就可以使用该接口提供的各种方法了

public interface QuerydslPredicateExecutor<T>
T findOne(Predicate predicate);

Iterable<T> findAll(Predicate predicate);

long count(Predicate predicate); boolean exists(Predicate predicate);
// … more functionality omitted.

}

interface UserRepository extends CrudRepository<User, Long>, QuerydslPredicateExecutor<User> {}

引入依赖

<querydsl.version>4.4.0</querydsl.version>
<apt.version>1.1.3</apt.version>

<!‐‐ querydsl ‐‐>
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl‐jpa</artifactId>
<version>${querydsl.version}</version>
</dependency>


添加maven插件
这个插件是为了让程序自动生成query type(查询实体,命名方式为:“Q”+对应实体名)。

<build>
<plugins>
<plugin>
<groupId>com.mysema.maven</groupId>
<artifactId>apt‐maven‐plugin</artifactId>
<version>${apt.version}</version>
<dependencies>
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl‐apt</artifactId>
<version>${querydsl.version}</version>
</dependency>
</dependencies>
<executions>
<execution>
<phase>generate‐sources</phase>
<goals>
<goal>process</goal>
</goals>
<configuration>
<outputDirectory>target/generated‐sources/queries</outputDirectory>
<processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor>
<logOnlyOnError>true</logOnlyOnError>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>


执行mvn compile之后,可以找到该target/generated-sources/java,然后IDEA标示为源代码目录即可.

在这里插入图片描述

QuerydslPredicateExecutor查询结果:

/*
等于 EQ : equal .eq
不等于 NE : not equal .ne
小于 LT : less than .lt
大于 GT : greater than .gt
小于等于 LE : less than or equal .loe
大于等于 GE : greater than or equal .goe
 */

@Autowired
CustomerDslRepository repository;

@Test
public void test02(){
QCustomer qCustomer = QCustomer.customer;
Iterable<Customer> all = repository.findAll(qCustomer.id.in(1L, 5L).and(qCustomer.firstName.in("徐庶", "王五"))); System.out.println(all);
}

自定义查询结果

@Autowired
CustomerDslRepository repository;

@PersistenceContext
EntityManager em;

@Test
public void test01(){
JPAQueryFactory queryFactory = new JPAQueryFactory(em);
QCustomer qCustomer = QCustomer.customer;

QueryResults<Tuple> tupleQueryResults = queryFactory.from(qCustomer)
.select(qCustomer.id.sum(), qCustomer.id)
.where( qCustomer.id.between(1, 2)
)
.orderBy(qCustomer.id.desc())
.groupBy(qCustomer.id)
.fetchResults();
for (Tuple result : tupleQueryResults.getResults()) {
System.out.println(result.get(qCustomer.id));
System.out.println(result.get(qCustomer.id.sum()));
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
jpa querydsl是一种用于简化复杂操作的工具,在使用jpaquerydsl的整合过程中起到了很大的作用。通常情况下,使用apt插件生成的jpa使用的Q类是不能直接使用的,需要使用改造版的Q类(extends EntityPathBase<Entity>)。在使用jpaquerydsl整合的过程中,可以通过使用Q类来构建查询,它可以方便地操作数据库表中的字段并封装结果集到实体类中。在具体的代码实现中,可以使用JPASQLQuery类来进行查询操作,并使用Q类来指定查询的字段和临时表的字段。可以参考相关的文档和教程来了解更多关于jpaquerydsl的整合方法和使用技巧。 <span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [JPAQueryDSL-JPA 使用指南](https://blog.csdn.net/footless_bird/article/details/129359394)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [详解spring boot jpa整合QueryDSL来简化复杂操作](https://download.csdn.net/download/weixin_38686153/12761625)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值