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()));
}
}
Spring Date JPA -自定义操作(Querydsl)相关推荐
- Spring Data JPA REST Query QueryDSL
案例概述 在本教程中,我们将研究使用Spring Data JPA和Querydsl为REST API构建查询语言. 在本系列的前两篇文章中,我们使用JPA Criteria和Spring Data ...
- Spring Data JPA 自定义Repository接口与子接口
上篇文章介绍了 Repository接口的使用(Spring Data JPA介绍与Spring的整合),接下来重点掌握 Repository的CrudRepository子接口下的子接口. 在dao ...
- Spring Date JPA实现增删改查
1.新建一个Cart类 package com.entity;public class Cart {private int id;private int userId;private int medi ...
- Spring Data JPA使用必备(三):Spring Data JPA自定义SQL写法
Spring Data JPA的前两篇已经写了通过方法名格式自动生成SQL,也简单的提到了@Query注解.但是往往真正的业务逻辑里面,这些是完全不够用的,涉及到一些稍微复杂一点的查询就会有点问题,如 ...
- 解决spring boot+JPA实现操作数据库时编辑时也变成了新增
场景:使用spring boot+JPA框架开发项目的时候,新增数据是正常的,但是编辑有时候会变成新增,JPA判断是否新增对象有两个方法:1根据id,2根据版本号.我在开发项目中用的是根据版本号进行判 ...
- Spring Data JPA自定义SELECT查询语句,自定义UPDATE修改语句
查询语句: 1. 在@Query 注解里设置value ,?1.?2 分别代表第一第二个参数, nativeQuery=true 表示是否是原生SQL @Query(value = "se ...
- Spring Data JPA 禁止自动更新
公司的项目后台架构是SpringBoot + Spring Date JPA,采用MySQL数据库.在工作刚开始时就遇到了一个奇怪的现象.在采用Date JPA查询完数据库之后,若改变了查询出的对象属 ...
- Spring Data JPA 实战
课程介绍 <Spring Data JPA 实战>内容是基于作者学习和工作中实践的总结和升华,有一句经典的话:"现在的开发人员是站在巨人的肩上,弯道超车".因现在框架越 ...
- 01 | Spring Data JPA 初识
课程正式开始了,这里我会以一个案例的形式来和你讲解如何通过 Spring Boot 结合 Spring Data JPA 快速启动一个项目.如何使用 UserRepository 完成对 User 表 ...
- 快速搭建springmvc+spring data jpa工程
一.前言 这里简单讲述一下如何快速使用springmvc和spring data jpa搭建后台开发工程,并提供了一个简单的demo作为参考. 二.创建maven工程 http://www.cnblo ...
最新文章
- 十年AI学者影响力盘点:何恺明排名第一,华人学者呈正向流入
- nginx修改监听端口号8080_Nginx + Tomcat 配置
- javaweb学习总结(二十一)——JavaWeb的两种开发模式
- ****** 四 ******、软设笔记【数据结构】-排序、插入排序、选择排序
- pn532跳坑小指南
- 05_过滤器解决请求中文乱码(继承HttpServletRequestWrapper)
- 百度指数查关键词(惊到我啦)
- vss2005使用手册
- linux下c语言图形界面实现,「分享」C语言如何编写图形界面
- (十二)GA-RPN----2019CVPR论文解读
- CCF NOI 2022获奖名单
- linux的adsl拨号上网,详细讲解Linux系统下ADSL拨号上网的方法
- 好物推荐:眼科OCT影像自动分割工具推荐
- BLAST原理和用法总结(二)
- /*深度优先建立深林,孩子兄弟法*/
- 【C语言小题】分数求和
- Pro ASP.NET Core MVC(四)【C#关键特征】
- UltraISO 制作U盘启动盘
- 4号线地铁站点列表_北京地铁4号线线路图 4号线地铁站点列表
- 不升职还能加薪,美团5年首次职级大调整
热门文章
- 面试官:说说你对 options 请求的理解
- 计算机网络—IP地址及其表示方法
- Modbus的常见问题解答:RS485总线连接采用什么样的线缆?RS485总线为什么要采用手拉手结构?RS485总线在连接时为什么要屏蔽接地?什么叫共模干扰和差模干扰?如何消除通讯线上的干扰?
- python3 面向对象_傻瓜式学Python3——面向对象
- 高可用架构演进之单元化
- used in key specification without a key length
- 《平成的超级偶像金牌舔狗》之mmdetection,paddle detection安装,demo跑通,训练跑通,保姆级教学
- 使用PHP实现Namesilo动态解析DDNS
- ECMAScript 6基础总结
- Snaker的回退流程源码分析