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

 2019-10-17 22:05  阅读(1958)
文章分类:Spring boot

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

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

这是jpa文件夹结构

20191017100416\_1.png

20191017100416\_2.png

20191017100416\_3.png

20191017100416\_4.png

最基础的一个接口是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  */ @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(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  */ @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);
    }

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


来源:[]()

点赞(0)
版权归原创作者所有,任何形式转载请联系作者; Java 技术驿站 >> Spring源码学习-spring data jpa源码分析

相关推荐