cn.cliveyuan.robin.base.BaseMapper Maven / Gradle / Ivy
/*
* Copyright (c) 2020 Clive Yuan ([email protected]).
*/
package cn.cliveyuan.robin.base;
import cn.cliveyuan.robin.base.condition.Example;
import cn.cliveyuan.robin.base.provider.SqlProvider;
import org.apache.ibatis.annotations.DeleteProvider;
import org.apache.ibatis.annotations.InsertProvider;
import org.apache.ibatis.annotations.Options;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.SelectProvider;
import org.apache.ibatis.annotations.UpdateProvider;
import java.util.List;
/**
* 基础 Mapper
*
* @author Clive Yuan
* @date 2020/10/28
*/
public interface BaseMapper {
boolean USE_GENERATED_KEYS = true;
String KEY_PROPERTY = "id";
/**
* 选择性插入
*
* 仅插入非null字段
*
* @param entity 实体
* @return 影响行数
*/
@InsertProvider(SqlProvider.class)
@Options(useGeneratedKeys = USE_GENERATED_KEYS, keyProperty = KEY_PROPERTY)
int insert(T entity);
/**
* 全字段插入
*
* 无论是否为null均进行插入
*
* @param entity 实体
* @return 影响行数
*/
@InsertProvider(SqlProvider.class)
@Options(useGeneratedKeys = USE_GENERATED_KEYS, keyProperty = KEY_PROPERTY)
int insertAll(T entity);
/**
* 选择性插入且忽略错误
*
* 仅插入非null字段
*
* @param entity 实体
* @return
*/
@InsertProvider(SqlProvider.class)
@Options(useGeneratedKeys = USE_GENERATED_KEYS, keyProperty = KEY_PROPERTY)
int insertIgnore(T entity);
/**
* 批量选择性插入
*
* @param list 实体列表
* @return 影响行数
*/
@InsertProvider(SqlProvider.class)
@Options(useGeneratedKeys = USE_GENERATED_KEYS, keyProperty = KEY_PROPERTY)
int batchInsert(@Param("list") List list);
/**
* 批量选择性插入且忽略错误
*
* @param list 实体列表
* @return
*/
@InsertProvider(SqlProvider.class)
@Options(useGeneratedKeys = USE_GENERATED_KEYS, keyProperty = KEY_PROPERTY)
int batchInsertIgnore(@Param("list") List list);
/**
* 根据ID删除
*
* @param id 主键ID
* @return 影响行数
*/
@DeleteProvider(SqlProvider.class)
int delete(@Param("id") Long id);
/**
* 批量ID删除
*
* @param ids ID列表
* @return 影响行数
*/
@DeleteProvider(SqlProvider.class)
int batchDelete(@Param("ids") List ids);
/**
* 根据条件删除
*
* @param example 条件构造器
* @return 影响行数
*/
@DeleteProvider(SqlProvider.class)
int deleteByExample(@Param("example") Example example);
/**
* 选择性更新
*
* 仅更新非null字段
*
* @param entity 实体
* @return 影响行数
*/
@UpdateProvider(SqlProvider.class)
int update(@Param("entity") T entity);
/**
* 全字段更新
*
* 无论是否为null均进行更新
*
* @param entity 实体
* @return 影响行数
*/
@UpdateProvider(SqlProvider.class)
int updateAll(@Param("entity") T entity);
/**
* 根据条件选择性更新
*
* @param entity 实体
* @param example 条件构造器
* @return 影响行数
*/
@UpdateProvider(SqlProvider.class)
int updateByExample(@Param("entity") T entity, @Param("example") Example example);
/**
* 根据条件更新全字段
*
* @param entity 实体
* @param example 条件构造器
* @return 影响行数
*/
@UpdateProvider(SqlProvider.class)
int updateByExampleAll(@Param("entity") T entity, @Param("example") Example example);
/**
* 根据ID获取实体
*
* @param id 主键ID
* @return 实体对象
*/
@SelectProvider(SqlProvider.class)
T get(@Param("id") Long id);
/**
* 批量获取实体
*
* @param ids ID列表
* @return 实体列表
*/
@SelectProvider(SqlProvider.class)
List batchGet(@Param("ids") List ids);
/**
* 根据条件获取实体
*
* 多个时仅返回ID倒序排序首个
*
* @param example 条件构造器
* @return 实体对象
*/
@SelectProvider(SqlProvider.class)
T getByExample(@Param("example") Example example);
/**
* 根据条件列表查询
*
* @param example 条件构造器
* @return 实体列表
*/
@SelectProvider(SqlProvider.class)
List list(@Param("example") Example example);
/**
* 根据条件数量查询
*
* @param example 条件构造器
* @return 数量
*/
@SelectProvider(SqlProvider.class)
int count(@Param("example") Example example);
}