All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.moon.data.accessor.BaseAccessor Maven / Gradle / Ivy

package com.moon.data.accessor;

import com.moon.core.model.BaseSupporter;
import com.moon.data.Record;
import org.springframework.data.domain.*;

import javax.persistence.EntityNotFoundException;
import java.util.List;
import java.util.Optional;
import java.util.function.Supplier;

/**
 * @author moonsky
 */
public interface BaseAccessor, ID> extends BaseSupporter {

    /**
     * 总是用 insert 语句插入一条数据,这是为了支持手动指定 ID 而设计的
     * 

* 有些少数场景可能希望不使用全局 ID 策略,而自己指定一个特殊的主键值,此时可以通过 *

* 调用此方法达到目的,同时由于{@code persist}方法的开放性,也有些需要注意的: * *

     * 1. 全局主键策略一般会自带唯一性,手动指定也需要手动控制主键唯一,否则会主键冲突;
     * 2. 此方法也可以不用指定主键,此时应等价于{@link #save(Record)}(实际上也是 insert);
     * 
* * @param entity 将要插入的对象 * @param 数据类型 * * @return 返回插入数据后的对象 */ S insert(S entity); /** * 保存 * * @param entity 将要保存的对象 * * @return 返回保存后的对象;对于新对象,返回的对象 == 保存前的对象,且返回对象有 ID 值; * 对于旧对象,返回值就是保存前的对象 */ S save(S entity); /** * 保存 * * @param entity 将要保存的对象 * * @return */ S saveAndFlush(S entity); /** * 保存 * * @param entities 将要保存的对象 * * @return 保存后的对象 */ List saveAll(Iterable entities); /** * 保存 * * @param first 将要保存的对象 * @param second 将要保存的对象 * @param entities 将要保存的对象 * * @return 保存后的对象 */ List saveAll(T first, T second, T... entities); /** * 查询 * * @return 返回所有记录结果 */ List findAll(); /** * 查询 * * @param sort 排序方式 * * @return 返回排序后的所有对象 */ List findAll(Sort sort); /** * 查询 * * @param pageable 分页 * * @return 返回分页结果 */ Page findAll(Pageable pageable); /** * 查询 * * @param example * @param * * @return 符合条件的所有对象 */ Iterable findAll(Example example); /** * 查询 * * @param example * @param sort 排序方式 * @param * * @return 符合条件的所有对象 */ List findAll(Example example, Sort sort); /** * 查询 * * @param example * @param pageable 分页 * @param * * @return 符合条件的所有分页对象 */ Page findAll(Example example, Pageable pageable); /** * 下一页切片 * * @param pageable 分页 * * @return 所有符合条件的片段,与 page 的区别是,page 会返回总数,这个不需要返回数据总数 */ Slice sliceAll(Pageable pageable); /** * 下一页切片 * * @param example * @param pageable 分页 * @param * * @return 所有符合条件的片段,与 page 的区别是,page 会返回总数,这个不需要返回数据总数 */ Slice sliceAll(Example example, Pageable pageable); /** * 查询 * * @param ids ID 列表 * * @return 符合 ID 的所有对象 */ List findAllById(Iterable ids); /** * 查询 * * @param first ID * @param second ID * @param ids ID 列表 * * @return 符合 ID 的所有对象 */ List findAllById(ID first, ID second, ID... ids); /** * 查询 * * @param id ID * * @return ID 匹配的对象 */ Optional findById(ID id); /** * 表中是否存在对应 ID 存在的值 * * @param id ID * * @return 如果存在 ID 匹配的对象返回 true;否则返回 false */ boolean existsById(ID id); /** * 返回表总数 * * @return 表中数据总数 */ long count(); /** * 查询 * * @param id ID * * @return ID 匹配的对象,不存在是抛出异常 * * @throws IllegalArgumentException 数据不存在 */ T getById(ID id); /** * 查询 * * @param id ID * @param throwsMessageIfAbsent 异常消息 * * @return ID 匹配的对象,不存在是抛出异常 */ T getById(ID id, String throwsMessageIfAbsent); /** * 查询,抛出指定异常 * * @param id ID * @param throwIfAbsent 异常 * @param 异常类型 * * @return ID 匹配的对象,不存在是抛出异常 * * @throws X 异常 */ T getById(ID id, Supplier throwIfAbsent) throws X; /** * 查询 * * @param id ID * * @return ID 匹配的对象,不存在是抛出异常 * * @throws EntityNotFoundException 异常 */ T getOne(ID id); /** * 查询 * * @param id ID * * @return ID 匹配的对象,不存在时返回 null */ T getOrNull(ID id); /** * 删除 * * @param id ID */ void deleteById(ID id); /** * 删除 * * @param entity 将要删除的对象 */ void delete(T entity); /** * 删除 * * @param entities 将要删除的对象 */ void deleteAll(Iterable entities); /** * 删除 * * @param first 将要删除的对象 * @param second 将要删除的对象 * @param entities 将要删除的对象 */ void deleteAll(T first, T second, T... entities); }