天天看点

Spring Data JPA:解析CriteriaQuery

CriteriaQuery 

CriteriaQuery定义在包路径javax.persistence.criteria下,其定义如下:

CriteriaQuery对应的类图如下:

Spring Data JPA:解析CriteriaQuery

此处聚焦CriteriaQuery继承体系中定义了哪些方法,请参见下图:

Spring Data JPA:解析CriteriaQuery

解读:

根据上述方法的返回值可知,AbstractQuery、CriteriaQuery接口中的方法大部分是返回其本身类型变量,可以理解为流式API的写法。

回顾一下Specification中toPredicate方法的定义,代码如下:

上述方法的第二个参数为CriteriaQuery类型,所以在构建Specification的实例(实现其toPredicate方法)时可以借助CriteriaQuery的能力,案例如下:

上述案例调用了CriteriaQuery的where以及orderBy方法以指定具体查询条件,在return语句中调用了CriteriaQuery的getRestriction方法。

Note:

从前面类图可知,getRestriction方法实际上是定义在CommonAbstractCriteria接口中,代码如下:

CriteriaQuery与EntityManager

EntityManager定义在包路径javax.persistence下,其中的一些方法如下图所示:

Spring Data JPA:解析CriteriaQuery

EntityManager提供了众多createQuery方法,其中一个createQuery方法可以接受CriteriaQuery类型的参数,该方法的定义如下:

上述代码通过EntityManager的getCriteriaBuilder方法获取了CriteriaBuilder类型的变量,进而构建了CriteriaQuery类型的变量,然后进一步利用CriteriaQuery中的from、where等方法指定查询条件。

扩展阅读

官方文档[地址]

其它[地址]