网站有哪些元素组成,东莞网站建设(曼哈顿信科),做单页网站盈利案例,画册排版JpaSpecificationExecutor 实现原理
我们还是先通过开发工具#xff0c;把关键的类添加到Diagram上面进行分析#xff0c;如图#xff1a; 我们通过上图可以看一下#xff0c;前面介绍的几个类之间的关联关系。
SimpleJpaRepository 实现类中的关键源码如下#xff1a; …JpaSpecificationExecutor 实现原理
我们还是先通过开发工具把关键的类添加到Diagram上面进行分析如图 我们通过上图可以看一下前面介绍的几个类之间的关联关系。
SimpleJpaRepository 实现类中的关键源码如下
/***以 findOne 为例
*/
public T findOne(SpecificationT spec) {try {return getQuery(spec, (Sort) null).getSingleResult();} catch (NoResultException e) {return null;}
}
/** 解析 Specification利用 EntityManager 直接实现调用逻辑。
*/
protected S extends T TypedQueryS getQuery(SpecificationS spec, ClassS domainClass, Sort sort) {CriteriaBuilder builder em.getCriteriaBuilder();CriteriaQueryS query builder.createQuery(domainClass);RootS root applySpecificationToCriteria(spec, domainClass, query);query.select(root);if (sort ! null) {query.orderBy(toOrders(sort, root, builder));}return applyRepositoryMethodMetadata(em.createQuery(query));
}
其实我们可以看的出来底层都是调用的 EntityManager。
与 EntityManager 的关系图 通过此图可以体会一下 Repository 和 EntityManager 的关联关系。 其实在实际项目中我们的 Repository 可以扩展的更加优雅一点来解决后台 API 的 search 问题和如何自定义 Respository?下一篇内容将会来讲解这个问题。