zoukankan      html  css  js  c++  java
  • SpringBoot05 数据操作02 -> JPA接口详解

    概览

      JpaRepository 继承 PagingAndSortingRepository 继承 CrudRepository 继承 Repository

    1 Repository

      这是一个空接口,主要是用来指定它的子接口是一个持久层接口

      实现了Repository的接口默认就是一个持久层接口,会被容器管理起来;这就是为什么我们自己写的接口继承了JpaRepository后不用添加@Repository的原因

    public interface Repository<T, ID extends Serializable> {
    
    }
    Repository

    2 CrudRepository

      CrudRepository继承自Repository接口,该接口定义了一些简单的增删改查方法

    /*
     * 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();
    }
    CrudRepository

    3 PagingAndSortingRepository

      PagingAndSortingRepository继承自CrudRepository接口,该接口不仅有CrudRepository接口中的增删改查方法,还定义了分页查询方法和排序方法

    /*
     * 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);
    }
    PagingAndSortingRepository

    4 JpaRepository

      JpaRepository继承自PagingAndSortingRepository接口和QueryByExampleExecutor接口,该接口不仅有PagingAndSortingRepository中的方法还有QueryByExampleExecutor中定义的方法

    //
    // Source code recreated from a .class file by IntelliJ IDEA
    // (powered by Fernflower decompiler)
    //
    
    package org.springframework.data.jpa.repository;
    
    import java.io.Serializable;
    import java.util.List;
    import org.springframework.data.domain.Example;
    import org.springframework.data.domain.Sort;
    import org.springframework.data.repository.NoRepositoryBean;
    import org.springframework.data.repository.PagingAndSortingRepository;
    import org.springframework.data.repository.query.QueryByExampleExecutor;
    
    @NoRepositoryBean
    public interface JpaRepository<T, ID extends Serializable> extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T> {
        List<T> findAll();
    
        List<T> findAll(Sort var1);
    
        List<T> findAll(Iterable<ID> var1);
    
        <S extends T> List<S> save(Iterable<S> var1);
    
        void flush();
    
        <S extends T> S saveAndFlush(S var1);
    
        void deleteInBatch(Iterable<T> var1);
    
        void deleteAllInBatch();
    
        T getOne(ID var1);
    
        <S extends T> List<S> findAll(Example<S> var1);
    
        <S extends T> List<S> findAll(Example<S> var1, Sort var2);
    }
    JpaRepository

    1. 定义

      JpaRepository接口中实现了一些简单的增删改查功能

    @NoRepositoryBean
    public interface JpaRepository<T, ID extends Serializable> extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T> {
        List<T> findAll();
    
        List<T> findAll(Sort var1);
    
        List<T> findAll(Iterable<ID> var1);
    
        <S extends T> List<S> save(Iterable<S> var1);
    
        void flush();
    
        <S extends T> S saveAndFlush(S var1);
    
        void deleteInBatch(Iterable<T> var1);
    
        void deleteAllInBatch();
    
        T getOne(ID var1);
    
        <S extends T> List<S> findAll(Example<S> var1);
    
        <S extends T> List<S> findAll(Example<S> var1, Sort var2);
    }
    JpaRepository

    2 技巧

      实现了JpaRepository后的接口会被容器自动进行管理

  • 相关阅读:
    JUC 1
    给定一个随机数生成器randm(),获得randn()
    堆与优先队列
    集合与映射
    二分搜索树
    链表
    栈与队列
    PostgreSQL ALTER TABLE 命令
    postgresql修改自增序列
    SQL 删除重复行,只保留一条记录
  • 原文地址:https://www.cnblogs.com/NeverCtrl-C/p/7904901.html
Copyright © 2011-2022 走看看