Spring源码学习-spring data jpa源码分析

我先从spring project的git上下载了Spring的源码

Spring data jpa的源码在Spring project的spring-orm/src/main/java/org/springframework/orm/jpa里

这是jpa文件夹结构


Spring源码学习-spring data jpa源码分析_第1张图片

Spring源码学习-spring data jpa源码分析_第2张图片

Spring源码学习-spring data jpa源码分析_第3张图片

Spring源码学习-spring data jpa源码分析_第4张图片

基础的一个接口是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.
 * 

* 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
 */
@NoRepositoryBean
public 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(Iterableextends 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
 */
@NoRepositoryBean
public 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);
}

好了,今天不早了,明天上午还要跟学长一起去公司交付一个外包项目,要睡了

你可能感兴趣的:(javaweb,学习,Spring,源码分析)