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()));
}
}

Spring Date JPA -自定义操作(Querydsl)相关推荐

  1. Spring Data JPA REST Query QueryDSL

    案例概述 在本教程中,我们将研究使用Spring Data JPA和Querydsl为REST API构建查询语言. 在本系列的前两篇文章中,我们使用JPA Criteria和Spring Data ...

  2. Spring Data JPA 自定义Repository接口与子接口

    上篇文章介绍了 Repository接口的使用(Spring Data JPA介绍与Spring的整合),接下来重点掌握 Repository的CrudRepository子接口下的子接口. 在dao ...

  3. Spring Date JPA实现增删改查

    1.新建一个Cart类 package com.entity;public class Cart {private int id;private int userId;private int medi ...

  4. Spring Data JPA使用必备(三):Spring Data JPA自定义SQL写法

    Spring Data JPA的前两篇已经写了通过方法名格式自动生成SQL,也简单的提到了@Query注解.但是往往真正的业务逻辑里面,这些是完全不够用的,涉及到一些稍微复杂一点的查询就会有点问题,如 ...

  5. 解决spring boot+JPA实现操作数据库时编辑时也变成了新增

    场景:使用spring boot+JPA框架开发项目的时候,新增数据是正常的,但是编辑有时候会变成新增,JPA判断是否新增对象有两个方法:1根据id,2根据版本号.我在开发项目中用的是根据版本号进行判 ...

  6. Spring Data JPA自定义SELECT查询语句,自定义UPDATE修改语句

    查询语句: 1. 在@Query 注解里设置value ,?1.?2 分别代表第一第二个参数, nativeQuery=true  表示是否是原生SQL @Query(value = "se ...

  7. Spring Data JPA 禁止自动更新

    公司的项目后台架构是SpringBoot + Spring Date JPA,采用MySQL数据库.在工作刚开始时就遇到了一个奇怪的现象.在采用Date JPA查询完数据库之后,若改变了查询出的对象属 ...

  8. Spring Data JPA 实战

    课程介绍 <Spring Data JPA 实战>内容是基于作者学习和工作中实践的总结和升华,有一句经典的话:"现在的开发人员是站在巨人的肩上,弯道超车".因现在框架越 ...

  9. 01 | Spring Data JPA 初识

    课程正式开始了,这里我会以一个案例的形式来和你讲解如何通过 Spring Boot 结合 Spring Data JPA 快速启动一个项目.如何使用 UserRepository 完成对 User 表 ...

  10. 快速搭建springmvc+spring data jpa工程

    一.前言 这里简单讲述一下如何快速使用springmvc和spring data jpa搭建后台开发工程,并提供了一个简单的demo作为参考. 二.创建maven工程 http://www.cnblo ...

最新文章

  1. 十年AI学者影响力盘点:何恺明排名第一,华人学者呈正向流入
  2. nginx修改监听端口号8080_Nginx + Tomcat 配置
  3. javaweb学习总结(二十一)——JavaWeb的两种开发模式
  4. ****** 四 ******、软设笔记【数据结构】-排序、插入排序、选择排序
  5. pn532跳坑小指南
  6. 05_过滤器解决请求中文乱码(继承HttpServletRequestWrapper)
  7. 百度指数查关键词(惊到我啦)
  8. vss2005使用手册
  9. linux下c语言图形界面实现,「分享」C语言如何编写图形界面
  10. (十二)GA-RPN----2019CVPR论文解读
  11. CCF NOI 2022获奖名单
  12. linux的adsl拨号上网,详细讲解Linux系统下ADSL拨号上网的方法
  13. 好物推荐:眼科OCT影像自动分割工具推荐
  14. BLAST原理和用法总结(二)
  15. /*深度优先建立深林,孩子兄弟法*/
  16. 【C语言小题】分数求和
  17. Pro ASP.NET Core MVC(四)【C#关键特征】
  18. UltraISO 制作U盘启动盘
  19. 4号线地铁站点列表_北京地铁4号线线路图 4号线地铁站点列表
  20. 不升职还能加薪,美团5年首次职级大调整

热门文章

  1. 面试官:说说你对 options 请求的理解
  2. 计算机网络—IP地址及其表示方法
  3. Modbus的常见问题解答:RS485总线连接采用什么样的线缆?RS485总线为什么要采用手拉手结构?RS485总线在连接时为什么要屏蔽接地?什么叫共模干扰和差模干扰?如何消除通讯线上的干扰?
  4. python3 面向对象_傻瓜式学Python3——面向对象
  5. 高可用架构演进之单元化
  6. used in key specification without a key length
  7. 《平成的超级偶像金牌舔狗》之mmdetection,paddle detection安装,demo跑通,训练跑通,保姆级教学
  8. 使用PHP实现Namesilo动态解析DDNS
  9. ECMAScript 6基础总结
  10. Snaker的回退流程源码分析