说起Querydsl这里不得不提及一些目前Java开源界十分火爆的框架,例如Hibernate。随着Hibernate中Criteria查询的普及似乎越来越多的朋友喜欢以API的方式来构建SQL查询了(笔者周围的很多朋友都是如此,貌似因为方便重构所以才这样,不过某些时候性能是个问题),当然这并不是说HQL不受欢迎,恰恰相反,在一些需要较高性能的地方无论是HQL还是SQL都十分受欢迎,也是较Criteria更加高效的手段之一。但无论是Criteria还是HQL在大量编写之后猛然转型回SQL查询,很多朋友都感觉到相当的不适应,至少笔者在使用Hibernate 5年之后感觉的确如此。
该Querydsl登场了,今天笔者带来的是一款名为Querydsl的通用查询框架。与Hibernate等ORM工具不同的是,Querydsl仅仅是一个通用的查询框架,之专注于通过Java API构建类型安全的SQL查询。Querydsl可以通过一组通用的查询api为用户构建出适合不同类型ORM框架或者是SQL的查询语句。也就是说 Querydsl是基于各种ORM框架以及SQL至上的一个通用的查询框架。借助Querydsl可以在任何支持的ORM框架或者SQL平台上以一种通用的API方式来构建查询。目前Querydsl支持的平台包括JPA,JDO,SQL,Java Collections,RDF,Lucene,Hibernate Search。
说说Querydsl的优势吧:
1. Querydsl支持代码自动完成,因为才纯Java API编写查询,因此主流Java IDE对起的代码自动完成功能支持几乎可以发挥到极致(因为是纯Java代码,所以支持很好)
2. Querydsl几乎可以避免所有的SQL语法错误(当然用错了Querydsl API除外,因为不写SQL了,因此想用错也难)
3. Querydsl采用Domain类型的对象和属性来构建查询,因此查询绝对是类型安全的,不会因为条件类型而出现问题
4. Querydsl采用纯Java API的作为SQL构建的实现可以让代码重构发挥到另一个高度(这也是Criteria让笔者十分喜爱的主要原因之一)
5. Querydsl的领一个优势就是可以更轻松的进行增量查询的定义
说了这么多之后,各位看官是否对Querydsl已经产生了兴趣呢?至少笔者对这个很有创意的小工具十分感兴趣,因此笔者在使用HQL构建查询的时候也曾经试图编写一个简单的查询条件构造器。现在看来Querydsl不但已经实现了笔者的想法而且其高度远在笔者至上了。不过Querydsl虽然好也需要开发团队对起使用进行一定的考量。
* 首先Querydsl并不使用现有的任何POJO进行查询构建,而是根据现有的配置生成对应的Domain Model进行查询构建,因此对于使用Hibernate的朋友回多出一组Model来
* 其次开发团队需要熟悉和了解Querydsl API,或者这不是一个十分漫长的过程,但毕竟需要学习成本,对于一个使用成熟框架的开发团队而言,这些是否需要。
不过对于笔者来说Querydsl带来的并不仅仅是使用上的方便,更是对查询理念上的一个改观,同时也是对目前各种ORM框架查询语言的一个升华吧。可能每个ORM框架无论是Hibernate还是EJB或者JDO都有着自己的一套查语言和语法的解析,笔者也觉得他们做的足够好,但如果想使用相同的语法风格在不同的ORM框架上进行操作呢?或者Querydsl会给出我们一个更好的解决方案吧。
想了解更多关于Querydsl的内用可以去官方网址看看,官方的文档还是很不错的说。
from:
http://xiexiejiao.cn/java/querydsl-1-9-5-release-download.html