Repository接口实现
深入理解Repository接口的实现机制,掌握Repository的创建和代理生成过程,理解方法解析、查询执行等核心流程。
📋 Repository概览
Repository是Spring Data的核心抽象,提供了数据访问的统一接口。
🎯 一、Repository接口体系
1.1 Repository接口
Repository接口:
java
@Indexed
public interface Repository<T, ID> {
}1.2 CrudRepository
CrudRepository接口:
java
@NoRepositoryBean
public interface CrudRepository<T, ID> extends Repository<T, ID> {
<S extends T> S save(S entity);
Optional<T> findById(ID id);
boolean existsById(ID id);
long count();
void deleteById(ID id);
void delete(T entity);
void deleteAll();
}1.3 PagingAndSortingRepository
PagingAndSortingRepository接口:
java
@NoRepositoryBean
public interface PagingAndSortingRepository<T, ID> extends CrudRepository<T, ID> {
Iterable<T> findAll(Sort sort);
Page<T> findAll(Pageable pageable);
}🎯 二、Repository代理生成
2.1 RepositoryFactory
RepositoryFactory:
java
public interface RepositoryFactory {
<T, ID> RepositoryMetadata getRepositoryMetadata(Class<T> domainClass);
RepositoryInformation getRepositoryInformation(RepositoryMetadata metadata);
Object getTargetRepository(RepositoryInformation metadata);
<T> T getRepository(Class<T> repositoryInterface,
RepositoryInformation metadata, Object target);
}2.2 代理创建
JpaRepositoryFactory.getRepository:
java
@Override
protected Object getTargetRepository(RepositoryInformation information) {
EntityManager entityManager = getEntityManager();
JpaEntityInformation<?, ?> entityInformation =
getEntityInformation(information.getDomainType());
return new SimpleJpaRepository<>(entityInformation, entityManager);
}🎯 三、方法解析
3.1 方法解析器
QueryLookupStrategy:
java
public interface QueryLookupStrategy {
RepositoryQuery resolveQuery(Method method, RepositoryMetadata metadata,
ProjectionFactory factory, NamedQueries namedQueries);
}3.2 查询方法
PartTree:
java
public class PartTree {
private final Subject subject;
private final Predicate predicate;
public PartTree(String source, Class<?> domainClass) {
// 解析方法名
}
}📖 学习资源
视频教程
书籍推荐
- 《Spring Data JPA从入门到精通》 - 张振华
网站资源
✅ 学习检查清单
- [ ] 已理解Repository接口体系
- [ ] 已理解代理生成机制
- [ ] 已理解方法解析
- [ ] 已总结核心知识点
上一章节:SpringData源码深度解析概览
下一章节:数据访问抽象
返回目录:源码阅读