首页
学习
活动
专区
圈层
工具
发布

springJPA 之 QueryDSL(一)

例如,与简单字符串相比,使用 API 的好处是 IDE中的代码完成 几乎没有语法无效的查询 可以安全地引用域类型和属性 更好地重构域类型的更改 QueryDSL 使用实战 3.1 引入 Maven 依赖...COPY 3.3 更新和删除 在 JPA 中已经为我们提供了非常简便的更新和删除的使用方式,我们完全没有必要使用 QueryDSL 的更新和删除,不过这里还是给出用法,供大家参考: 代码清单:spring-boot-jpa-querydsl...已经内置了一些常用的 Mysql 的聚合函数,如果遇到 QueryDSL 没有提供的聚合函数也无需慌张, QueryDSL 为我们提供了 Expressions 这个类,我们可以使用这个类手动拼接一个就好...小结 有关 QueryDSL 的介绍到这里就结束了,不知道各位读者看了上面的示例,有没有一种直接读 SQL 的感觉,而且这种 SQL 还是使用 OOM 的思想,将原本 Hibernate 没有做好的事情给出了一个相当完美的解决方案...,上手简单易操作,而又无需写 SQL ,实际上我们操作的还是对象类。

6K40
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    第二章:使用QueryDSL与SpringDataJPA实现单表普通条件查询

    在企业开发中ORM框架有很多种如:Hibernate,Mybatis,JdbcTemplate等。...,当然你们肯定发现了我这个实体类内并没有对应字段的Getter/Setter方法,如果没有添加@Data注解在SpringDataJPA映射数据时会出现找不到对应字段的Setter方法,导致无法完成数据映射到实体的异常...创建基类JPA 这里我们简单的封装下JPA,我们添加一个接口去继承我们需要的JPA接口并让所有子类继承我们的基类接口就可以了,基类JPA代码如下所示: package com.yuqiyu.querydsl.sample.chapter2...根据主键查询单条数据 查询详情方法是我们常用到的查询之一,一般用于删除、更新。下面我们就来编写一个detail方法来看来QueryDSL是如何完成查询单挑数据的。...由于QueryDSL的功能强大,有很多东西没有讲解到,希望大家可以在后期的项目中得到总结。

    2K20

    JPA为什么那么好用

    3.2 添加 Maven 插件添加这个插件是为了让程序自动生成 query type (查询实体,命名方式为:"Q"+对应实体名)。 上文引入的依赖中 querydsl-apt 即是为此插件服务的。...JPA 中已经为我们提供了非常简便的更新和删除的使用方式,我们完全没有必要使用 QueryDSL 的更新和删除,不过这里还是给出用法,供大家参考:代码清单:spring-boot-jpa-querydsl...已经内置了一些常用的 Mysql 的聚合函数,如果遇到 QueryDSL 没有提供的聚合函数也无需慌张, QueryDSL 为我们提供了 Expressions 这个类,我们可以使用这个类手动拼接一个就好...小结有关 QueryDSL 的介绍到这里就结束了,不知道各位读者看了上面的示例,有没有一种直接读 SQL 的感觉,而且这种 SQL 还是使用 OOM 的思想,将原本 Hibernate 没有做好的事情给出了一个相当完美的解决方案...,上手简单易操作,而又无需写 SQL ,实际上我们操作的还是对象类。

    2K30

    第五章:使用QueryDSL与SpringDataJPA实现查询返回自定义对象

    - INSERT INTO `good_types` VALUES ('1', '绿色蔬菜', '1', '1'); INSERT INTO `good_types` VALUES ('2', '根茎类'...QueryDSL & Projections 下面我们开始编写完全基于QueryDSL形式的返回自定义对象方法,代码如下所示: /** * 根据QueryDSL查询 * @return...bean方法第一个参数需要传递一个实体的泛型类型作为返回集合内的单个对象类型,如果QueryDSL查询实体内的字段与DTO实体的字段名字不一样时,我们就可以采用as方法来处理,为查询的结果集指定的字段添加别名...没有任何区别,采用了最原始的方式进行返回结果集,但是从fetch()获取到结果集后我们处理的方式就有所改变了,fetch()方法返回的类型是泛型List(List),List继承了Collection...总结 以上内容就是本章的全部内容,本章讲解的两种方法都是基于QueryDSL进行查询只不过一种采用QueryDSL为我们提供的形式封装自定义对象,而另外一种则是采用java8特性来完成的,Projections

    5.3K40

    第一章:Maven环境下如何配置QueryDSL环境

    QueryDSL是一个通用的查询框架,框架的核心原则是创建安全类型的查询,开始QueryDSL仅支持Hibernate(HQL),在不断开源人士加入QueryDSL团队后,陆续发布了针对JPA,JDO...本章目标 我们本系列的章节主要使用QueryDSL与SpringDataJPA在SpringBoot开发环境下进行整合使用,目前SpringDataJPA与QueryDSL整合可以说完美的结合,一个完美的结合你没有理由拒绝使用他们来完成企业级项目的开发...由于QueryDSL框架需要使用插件为我们配置了@Entity注解的实体自动对应创建QBean来作为查询时的条件以及自动生成QPath,下面我们需要修改pom.xml配置文件添加QueryDSL插件,如下代码块所示...而下面的插件就是我们添加的相关QueryDSL的插件,该插件会自动扫描项目内配置了@Entity的实体类,并根据实体的内定义的字段以及关联类通过JPAAnnotationProcessor自动创建Q[实体类名称...总结 至此我们本章的内容已经讲解完毕了,本章主要内容是我们在SpringBoot架构下如何配置QueryDSL的Maven环境,本系列项目是相当于SpringBoot系列文章的延伸,后期的文章讲解也是全部建立在

    1.9K30

    SpringBoot + QueryDSL 大大简化复杂查询操作

    百度的UI查询是这样定义的: 图片 在上图中加了蓝色下划线的地方即为我们在百度当中搜索的字符串内容,可以发现,百度的实现是将搜索的内容当做了http请求的url的参数来处理的,用了一个q作为key,q...从数据库的层面来说就是要去哪些数据库的哪些表去查询。 特定字段的类sql查询 这种查询是指定某个字段,然后采用类似于sql语句的写法进行查询,各种查询条件以一定的形式组织在一起,发给服务器进行解析。...我们也可以将多个条件拼接在一起,让他们直接用逻辑关系组合在一起,例如或者和并且的逻辑关系。...这就是所谓的类sql的查询,用起来非常的直观。...现在,假设我们有这样的查询: customerNumber: 5135116903 AND markets.active:false 没有疑问,上面的数据应该被查出来。

    2.1K20

    第七章:使用QueryDSL与SpringDataJPA实现子查询

    在上一章我们讲到了QueryDSL的聚合函数,让我们重新认识了QueryDSL的便利之处,它可以很好的使用原生SQL的思想来进行Java形式的描述,编写完成也不需要考虑更换数据库存在的不兼容问题。...当然QueryDSL还有很多我们没有发掘出来的核心技术,我们今天来讲解下”子查询“,看看QueryDSL是怎么完美的诠释了使用Java写SQL。...,在原生SQL内也有多种方式可以实现如:子查询、关联查询等。..."1",对应数据库的类型是”绿色蔬菜“,这证明了我们的编码跟返回的数据是一致的,那么接下来我们来看下QueryDSL为我们自动生成的SQL,如下所示: Hibernate: select...总结 以上内容就是本章的全部内容,我们使用三个简单的例子来讲述了QueryDSL子查询,QueryDSL完美的将原生的SQL编写方式转移到了Java程序内,内置了几乎所有的原生SQL的函数、关键字、语法等

    5.7K12

    第十四章:QueryDSL与SpringDataJPA共同服务于SpringBoot

    图5 上面我们导入的querydsl的maven依赖,下面的插件很重要,当我们执行maven compile命令的时候,queryDSL这个插件会自动在我们配置的目录下生成Qxxx结构化查询实体对象,querydsl...图9 文件内现在是没有内容的,因为我们还没有添加实体在项目中,下面我们根据数据库内的表结构创建对应实体。 商品信息实体内容如下图10所示: ? 图10 商品分类信息实体如下图11所示: ?...图12 目录内有两个querydsl插件自动生成的实体,命名规则就是原实体名称前+Q前缀。可以查看类内的代码,都是由querydsl插件自动构建的。...图15 上图5我们注入了EntityManager对象,因为我们构建JAPQuery对象需要它作为参数传入,使用QueryDSL查询的形式完全就是我们平时使用对象的形式那么简答,没有多余的内容!...Inquirer 自定义查询实体类,该类可以完成查询添加封装,查询结果处理操作,具体代码如下图18、19所示: ? 图18 ?

    2.2K40

    放弃 MyBatis、JPA,我最终选择了 JDBC Template!真香!!

    不管是hibernate还是jpa,表之间的连接查询,被映射为实体类之间的关联关系,这样,如果两个实体类之间没有(实现)关联关系,你就不能把两个实体(或者表)join起来查询。...这是很恼火的事情,因为我们很多时候并不需要显式定义两个实体类之间的关联关系就可以实现业务逻辑,如果使用hql,只是为了join我们就必须在两个实体类之间添加代码,而且还不能逆向工程,如果表里面没有定义外键约束的话...Ebean作为一种基于JPA的框架,它也使用JPQL语言进行查询,多数情况下会让人很恼火。...和Ebean,需要了解复杂的JPA概念和各种奇异的限制,JOOQ编写的就是普通的SQL语句,只是把查询结果填充到实体类中(严格说JOOQ没有实体类,只是自动生成的Record对象),JOOQ甚至不一定要把结果转换为实体类...相对于JOOQ,MyBatis在多数情况下没有任何优势。 Ebean同时具有很多不同框架的优点,但它是基于JPA的,难免有JPA的各种限制,这是致命的缺点。

    4.2K10

    放弃MyBatis!我选择 JDBCTemplate!

    MyBatis的流行证明了事实并非如此,至少在大多数情况下,使用hql并不比使用sql简单。...不管是hibernate还是jpa,表之间的连接查询,被映射为实体类之间的关联关系,这样,如果两个实体类之间没有(实现)关联关系,你就不能把两个实体(或者表)join起来查询。...这是很恼火的事情,因为我们很多时候并不需要显式定义两个实体类之间的关联关系就可以实现业务逻辑,如果使用hql,只是为了join我们就必须在两个实体类之间添加代码,而且还不能逆向工程,如果表里面没有定义外键约束的话...和Ebean,需要了解复杂的JPA概念和各种奇异的限制,JOOQ编写的就是普通的SQL语句,只是把查询结果填充到实体类中(严格说JOOQ没有实体类,只是自动生成的Record对象),JOOQ甚至不一定要把结果转换为实体类...相对于JOOQ,MyBatis在多数情况下没有任何优势。 Ebean同时具有很多不同框架的优点,但它是基于JPA的,难免有JPA的各种限制,这是致命的缺点。

    1.3K10

    再见 MyBatis!我选择 JDBCTemplate!

    MyBatis的流行证明了事实并非如此,至少在大多数情况下,使用hql并不比使用sql简单。...不管是hibernate还是jpa,表之间的连接查询,被映射为实体类之间的关联关系,这样,如果两个实体类之间没有(实现)关联关系,你就不能把两个实体(或者表)join起来查询。...这是很恼火的事情,因为我们很多时候并不需要显式定义两个实体类之间的关联关系就可以实现业务逻辑,如果使用hql,只是为了join我们就必须在两个实体类之间添加代码,而且还不能逆向工程,如果表里面没有定义外键约束的话...和Ebean,需要了解复杂的JPA概念和各种奇异的限制,JOOQ编写的就是普通的SQL语句,只是把查询结果填充到实体类中(严格说JOOQ没有实体类,只是自动生成的Record对象),JOOQ甚至不一定要把结果转换为实体类...相对于JOOQ,MyBatis在多数情况下没有任何优势。 Ebean同时具有很多不同框架的优点,但它是基于JPA的,难免有JPA的各种限制,这是致命的缺点。

    3.7K40

    再见!Mybatis,你好!JDBCTemplate

    MyBatis的流行证明了事实并非如此,至少在大多数情况下,使用hql并不比使用sql简单。...不管是hibernate还是jpa,表之间的连接查询,被映射为实体类之间的关联关系,这样,如果两个实体类之间没有(实现)关联关系,你就不能把两个实体(或者表)join起来查询。...这是很恼火的事情,因为我们很多时候并不需要显式定义两个实体类之间的关联关系就可以实现业务逻辑,如果使用hql,只是为了join我们就必须在两个实体类之间添加代码,而且还不能逆向工程,如果表里面没有定义外键约束的话...和Ebean,需要了解复杂的JPA概念和各种奇异的限制,JOOQ编写的就是普通的SQL语句,只是把查询结果填充到实体类中(严格说JOOQ没有实体类,只是自动生成的Record对象),JOOQ甚至不一定要把结果转换为实体类...相对于JOOQ,MyBatis在多数情况下没有任何优势。 Ebean同时具有很多不同框架的优点,但它是基于JPA的,难免有JPA的各种限制,这是致命的缺点。

    4.7K10

    Spring Data JPA 最佳实践

    只有输入没有输出的学习,是个 BUG 。 前言 Spring Data Jpa框架的目标是显著减少实现各种持久性存储的数据访问层所需的样板代码量。...下面看下怎么集成: 1、快速集成 因为之前有写过最简单的QueryDsl集成方式,所以这里就不在赘述了,具体参见《Querydsl结构化查询之jpa》, 2、丰富BaseJpaRepository基类...集成QueryDsl后,复杂分页查询的画风就变的更加清爽了,如: /** * QSendLog实体是QueryDsl插件自动生成的,插件会自动扫描加了@Entity的实体,生成一个用于查询的...下面是它的接口定义,可以看到,要么分页查询一步到位但是没有排序,要么排序查询返回List列表自己封装分页。...Spring Data Jpa也有打印sql的功能,但是比较鸡肋,它打印的是没有替换查询参数的sql,没法直接复制执行。

    3.3K22

    Spring Data Jpa最佳实践

    下面看下怎么集成: 1、快速集成 因为之前有写过最简单的QueryDsl集成方式,所以这里就不在赘述了,具体参见《Querydsl结构化查询之jpa》, 2、丰富BaseJpaRepository基类...集成QueryDsl后,复杂分页查询的画风就变的更加清爽了,如: /** * QSendLog实体是QueryDsl插件自动生成的,插件会自动扫描加了@Entity的实体,生成一个用于查询的...下面是它的接口定义,可以看到,要么分页查询一步到位但是没有排序,要么排序查询返回List列表自己封装分页。...使用方式如下: /** * QSendLog实体是QueryDsl插件自动生成的,插件会自动扫描加了@Entity的实体,生成一个用于查询的EntityPath类 */...Spring Data Jpa也有打印sql的功能,但是比较鸡肋,它打印的是没有替换查询参数的sql,没法直接复制执行。

    85120

    Spring认证中国教育管理中心-Apache Solr 的 Spring 数据教程一

    使用该repositories元素查找 Spring Data 存储库,如创建存储库实例中所述。...Spring Data Solr 存储库通过使用@EnableSolrRepositories注解激活,注解本质上带有与 XML 命名空间相同的属性。如果没有配置基础包,则使用配置类所在的包。...、优化或回滚以来的创建、更新和删除操作在服务器上排队,并作为一个组提交、优化或回滚。...目前没有 QueryDSL 支持。 声明的查询 从方法名称派生查询并不总是足够的,可能会导致方法名称不可读。...您应该记住“查询查找策略”中描述的命名约定或使用@Query. 以下示例显示如何在属性文件中声明名称查询: 示例 60.

    85820

    另一种思考:为什么不选JPA、MyBatis,而选择JDBCTemplate?

    MyBatis的流行证明了事实并非如此,至少在大多数情况下,使用hql并不比使用sql简单。...不管是hibernate还是jpa,表之间的连接查询,被映射为实体类之间的关联关系,这样,如果两个实体类之间没有(实现)关联关系,你就不能把两个实体(或者表)join起来查询。...这是很恼火的事情,因为我们很多时候并不需要显式定义两个实体类之间的关联关系就可以实现业务逻辑,如果使用hql,只是为了join我们就必须在两个实体类之间添加代码,而且还不能逆向工程,如果表里面没有定义外键约束的话...和Ebean,需要了解复杂的JPA概念和各种奇异的限制,JOOQ编写的就是普通的SQL语句,只是把查询结果填充到实体类中(严格说JOOQ没有实体类,只是自动生成的Record对象),JOOQ甚至不一定要把结果转换为实体类...相对于JOOQ,MyBatis在多数情况下没有任何优势。 Ebean同时具有很多不同框架的优点,但它是基于JPA的,难免有JPA的各种限制,这是致命的缺点。

    3.5K20

    hibernate的关联与级联

    大家好,又见面了,我是你们的朋友全栈君。 什么是关联(association) 1、关联指的是类之间的引用关系。如果类A与类B关联,那么被引用的类B将被定义为类A的属性。...但是通过测试我们发现,在查admin的时候没有把admin相关的role给查询出来,那是因为admin没有配置映射关系,多对一,所以admin无效果, 懒加载设置 其实有的时候我们不需要查询admin...信息,所以关联数据hiberante默认使用懒加载机制,所谓的懒加载就是我们需要使用这个数据他 才去查询,你不使用,H就不查询,但是必须建立在session不关闭的情况下, @OneToMany...,user会被删除,user_role的中的关系也会被删除了,但对应的role不会被删除 @Test public void testDelete() { User user = userDao.findById...(8); userDao.delete(user); } 测试:从方Role删除,如果user_role里面没有对应的roleId,role可以删除,user不会被删除 @Test public

    1.9K10
    领券