top.openyuan.jpa.repository.JpaRepositoryExt Maven / Gradle / Ivy
package top.openyuan.jpa.repository;
import top.openyuan.jpa.common.constant.JpaConfigConstant;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.repository.NoRepositoryBean;
/**
* 用于增强 {@link JpaRepository} 接口功能的 {@link JpaRepositoryExt} 接口.
*
* @param 实体类的泛型
* @param 实体类的 ID
* @author lzy on 2020-12-04.
* @since v1.0.0
*/
@NoRepositoryBean
public interface JpaRepositoryExt extends JpaRepository {
/**
* 批量新增实体类集合,该方法仅用于新增,不能用于有更新数据的场景,需要调用方事先做好处理.
*
* 该方法会批量 {@code flush} 数据到数据库中,每次默认的批量大小为 {@link JpaConfigConstant#DEFAULT_BATCH_SIZE}.
* 该方法相比 {@link #saveAll(Iterable)} 性能更高,但仅能用于新增插入数据的场景。
*
* @param entities 实体类集合
* @param 泛型实体类
*/
void saveBatch(Iterable entities);
/**
* 批量新增实体类集合,该方法仅用于新增,不能用于有更新数据的场景,需要调用方事先做好处理.
*
* 该方法会批量 {@code flush} 数据到数据库中,每次批量大小为可通过参数设置.
* 该方法相比 {@link #saveAll(Iterable)} 性能更高,但仅能用于新增插入数据的场景。
*
* @param entities 实体类集合
* @param batchSize 批量大小
* @param 泛型实体类
*/
void saveBatch(Iterable entities, int batchSize);
/**
* 批量更新实体类集合,该方法仅用于更新,不能用于含有新增数据的场景,需要调用方事先做好处理.
*
* 该方法会批量 {@code flush} 数据到数据库中,每次默认的批量大小为 {@link JpaConfigConstant#DEFAULT_BATCH_SIZE}.
* 该方法相比 {@link #saveAll(Iterable)} 性能更高,但仅能用于更新数据的场景。
*
* @param entities 可迭代的实体类集合
* @param 泛型实体类
*/
void updateBatch(Iterable entities);
/**
* 批量更新实体类集合,该方法仅用于更新,不能用于含有新增数据的场景,需要调用方事先做好处理.
*
* 该方法会批量 {@code flush} 数据到数据库中,每次批量大小可通过参数设置.
* 该方法相比 {@link #saveAll(Iterable)} 性能更高,但仅能用于更新数据的场景。
*
* @param entities 可迭代的实体类集合
* @param batchSize 批量大小
* @param 泛型实体类
*/
void updateBatch(Iterable entities, int batchSize);
/**
* 新增或更新实体类中非 null 属性的字段值.
*
* 注意:该方法保存每条数据时会先查询判断是否存在,再进行插入或者更新.
*
*
* - 如果实体的主键 ID 为空,说明是新增的情况,就插入一条新的数据;
* - 如果实体的主键 ID 不为空,会先判断是否存在该 ID 的数据,如果不存在也会新增插入一条数据;
* 否则说明是更新的情况,会仅更新实体类属性中不为 null 值的属性字段到数据库中;
*
*
* @param entity 实体类
* @param 泛型实体类
* @return 原实体类,注意:如果是更新的情况,返回的值不一定有数据库中之前的值
*/
S saveOrUpdateByNotNullProperties(S entity);
/**
* 新增或更新所有实体类中非 null 属性的字段值.
*
* 注意:该方法仅仅是循环调用 {@link #saveOrUpdateByNotNullProperties(Object)} 方法,
* 保存每条数据时会先查询判断是否存在,再进行插入或者更新.
*
*
* - 如果某个实体的主键 ID 为空,说明是新增的情况,就插入一条新的数据;
* - 如果某个实体的主键 ID 不为空,会先判断是否存在该 ID 的数据,如果不存在也会新增插入一条数据;
* 否则说明是更新的情况,会仅更新实体类属性中不为 null 值的属性字段到数据库中;
*
*
* @param entities 可迭代的实体类集合
* @param 泛型实体类
*/
void saveOrUpdateAllByNotNullProperties(Iterable entities);
/**
* 根据 ID 的集合数据删除这些数据,注意该方法仅是循环调用 {@link #deleteById(Object)} 方法而已,
* 性能相比 {@link #deleteBatchByIds(Iterable, int)} 而言较低.
*
* @param ids ID 集合
*/
void deleteByIds(Iterable ids);
/**
* 根据 ID 的集合批量删除数据这些数据,删除期间会批量转换为 {code in} 条件来匹配删除,
* 性能相比 {@link #deleteByIds(Iterable)} 也更高,每次默认的批量大小为 {@link JpaConfigConstant#DEFAULT_BATCH_SIZE}.
*
* @param ids ID 集合
*/
void deleteBatchByIds(Iterable ids);
/**
* 根据 ID 的集合批量删除数据这些数据,删除期间会批量转换为 {code in} 条件来匹配删除,
* 性能相比 {@link #deleteByIds(Iterable)} 也更高,可自定义批量大小的参数.
*
* @param ids ID 集合
* @param batchSize 批量大小
*/
void deleteBatchByIds(Iterable ids, int batchSize);
}