全面解析JPA 仓库repository中的findAll()方法
程序员文章站
2024-03-26 17:14:23
解析jpa仓库repository的findall()方法源码(1) specification spec 对象 (2) pageable pageable 对象下面是findall()实现类getq...
解析jpa仓库repository的findall()方法
源码
(1) specification spec 对象
(2) pageable pageable 对象
下面是findall()实现类
getquery(spec,pageable)方法作用
返回一个指定操作表,指定返回项,指定排序方式,指定查询条件的query对象
1.其中getdomainclass()作用
returns the actual domain class type. 也就是数据表对应的实体类
2.执行getquery方法
其中em是entitymanager对象,用来获取criteriabuilder 实例(参考链接criteriabuilder动态构造查询)
-
criteriabuilder
:可以用于创建criteriaquery、criteriaupdate和criteriadelete等 -
createquery
:hibernate的sql操作方法,用来生成一个基于 hql 查询字符串的 query 对象,domainclass指的是表对应的实体类
2.1 applyspecificationtocriteria(…)方法:
将specification中生成的predicate应用于criteria
spec.topredicate(…)方法,是spec实例调用spec类中的topredicate(),获取查询条件。
where()源码翻译:
query.where(predicate)作用,根据predicate(查询条件的集合)修改query限制查询结果(如果之前有条件限制,会自动替换),如果此次没有添加任何限制,之前的条件限制会被移除(也就是说,条件限制会覆盖),这里的where()重写了abstractquery接口中where(),predicate条件可以为空也可以是多个,返回结果是the modified query
2.2 回到getquery方法中
-
query.select()
:指定要在查询结果中返回的项(覆盖,若之前有所指定,则覆盖),这里指定返回项是表对应的实体类,返回结果是the modified query -
query.orderby()
:修改排序规则,返回结果也是the modified query,这里不对 toorders过多的即使
-
em.createquery(query)
:创建typedquery 实例,用来执行executing a criteria query
执行查询语句,返回结果集(不做详细分析)
-
query.getresultlist()
:返回查询结果(相当于hibernate中list()方法执行hql,返回结果) -
getresultlist()
:方法会调用dolist()方法
这个方法中会生成sql语句expandequery:
jpa repository的findone正确写法和findall
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。