
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 extends X> 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 extends T> entities);
/**
* 删除
*
* @param first 将要删除的对象
* @param second 将要删除的对象
* @param entities 将要删除的对象
*/
void deleteAll(T first, T second, T... entities);
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy