Spring源码学习-spring data jpa源码分析
来源:互联网 发布:蓝月传奇光翼升阶数据 编辑:程序博客网 时间:2024/05/24 06:04
我先从spring project的git上下载了Spring的源码
Spring data jpa的源码在Spring project的spring-orm/src/main/java/org/springframework/orm/jpa里
这是jpa文件夹结构
最基础的一个接口是org.springframework.data.repository.Repository,这个接口是一个空接口,接口源码为
package org.springframework.data.repository;import java.io.Serializable;/** * Central repository marker interface. Captures the domain type to manage as well as the domain type's id type. General * purpose is to hold type information as well as being able to discover interfaces that extend this one during * classpath scanning for easy Spring bean creation. * <p> * Domain repositories extending this interface can selectively expose CRUD methods by simply declaring methods of the * same signature as those declared in {@link CrudRepository}. * * @see CrudRepository * @param <T> the domain type the repository manages * @param <ID> the type of the id of the entity the repository manages * @author Oliver Gierke */public interface Repository<T, ID extends Serializable> {}
意思是T是实体类,ID是可序列化的主键属性
然后是org.springframework.data.repository.CrudRepository接口,这个接口主要是定义了增删改查的方法,接口源码如下
/* * Copyright 2008-2011 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */package org.springframework.data.repository;import java.io.Serializable;/** * Interface for generic CRUD operations on a repository for a specific type. * * @author Oliver Gierke * @author Eberhard Wolff */@NoRepositoryBeanpublic interface CrudRepository<T, ID extends Serializable> extends Repository<T, ID> { /** * Saves a given entity. Use the returned instance for further operations as the save operation might have changed the * entity instance completely. * * @param entity * @return the saved entity */ <S extends T> S save(S entity); /** * Saves all given entities. * * @param entities * @return the saved entities * @throws IllegalArgumentException in case the given entity is (@literal null}. */ <S extends T> Iterable<S> save(Iterable<S> entities); /** * Retrieves an entity by its id. * * @param id must not be {@literal null}. * @return the entity with the given id or {@literal null} if none found * @throws IllegalArgumentException if {@code id} is {@literal null} */ T findOne(ID id); /** * Returns whether an entity with the given id exists. * * @param id must not be {@literal null}. * @return true if an entity with the given id exists, {@literal false} otherwise * @throws IllegalArgumentException if {@code id} is {@literal null} */ boolean exists(ID id); /** * Returns all instances of the type. * * @return all entities */ Iterable<T> findAll(); /** * Returns all instances of the type with the given IDs. * * @param ids * @return */ Iterable<T> findAll(Iterable<ID> ids); /** * Returns the number of entities available. * * @return the number of entities */ long count(); /** * Deletes the entity with the given id. * * @param id must not be {@literal null}. * @throws IllegalArgumentException in case the given {@code id} is {@literal null} */ void delete(ID id); /** * Deletes a given entity. * * @param entity * @throws IllegalArgumentException in case the given entity is (@literal null}. */ void delete(T entity); /** * Deletes the given entities. * * @param entities * @throws IllegalArgumentException in case the given {@link Iterable} is (@literal null}. */ void delete(Iterable<? extends T> entities); /** * Deletes all entities managed by the repository. */ void deleteAll();}
还有一个比较重要的Repository是PagingAndSortingRepository,这个接口提供了分页查询和排序查询
/* * Copyright 2008-2010 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */package org.springframework.data.repository;import java.io.Serializable;import org.springframework.data.domain.Page;import org.springframework.data.domain.Pageable;import org.springframework.data.domain.Sort;/** * Extension of {@link CrudRepository} to provide additional methods to retrieve entities using the pagination and * sorting abstraction. * * @author Oliver Gierke * @see Sort * @see Pageable * @see Page */@NoRepositoryBeanpublic interface PagingAndSortingRepository<T, ID extends Serializable> extends CrudRepository<T, ID> { /** * Returns all entities sorted by the given options. * * @param sort * @return all entities sorted by the given options */ Iterable<T> findAll(Sort sort); /** * Returns a {@link Page} of entities meeting the paging restriction provided in the {@code Pageable} object. * * @param pageable * @return a page of entities */ Page<T> findAll(Pageable pageable);}
好了,今天不早了,明天上午还要跟学长一起去公司交付一个外包项目,要睡了
阅读全文
0 0
- Spring源码学习-spring data jpa源码分析
- spring data jpa 学习
- Spring Data JPA学习
- Spring.Data.IBatis源码
- 学习Spring Data JPA 小结
- Spring Data JPA简单学习
- Spring Data JPA 入门学习
- Spring Data JPA学习一
- 跟着问题学习Spring Data Jpa----Spring Data Jpa配置
- 《spring-boot学习》-07-spring data jpa
- Spring Boot [组件学习-Spring Data JPA]
- spring 源码分析 spring jdbc
- spring源码分析:spring生命周期
- spring-data-redis源码分析以及代码漏洞
- Spring源码学习-5.AOP原理分析
- spring源码学习之四 BeanDefinitionParserDelegate分析
- Spring 源码分析:ApplicationContext
- Spring 源码分析:ApplicationContext- -
- Codeforces 854A
- springmvc常用注解标签详解
- Codeforces Round #433 (Div. 2) Jury Meeting(贪心)
- iOS学习笔记-123.多线程22——多图下载2_第二种实现方式(三级缓存)
- Elasticsearch 批量更新和删除
- Spring源码学习-spring data jpa源码分析
- [java]④自定义按钮 应用在JFrame窗体
- springboot itext下载pdf
- 自我介绍待补充
- 51nod 1239 欧拉函数之和
- 深夜切题——PAT (Basic Level)-1040
- 《mysql必知必会》
- Codeforces-854B
- Apache连接数和连接数的限制