package com.enterprise.manage.common.base;

import com.enterprise.manage.common.web.request.PageDomain;
import com.github.pagehelper.PageInfo;

import java.io.Serializable;
import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * Base Interface Service (基础服务接口类)
 *
 * @author PeiZhi Guo
 * 2021-2-27 10:58
 */
public interface BaseIService<T> {

    /**
     * 获取对应 entity 的 BaseMapper
     *
     * Return BaseMapper<T>
     */
    BaseMapper<T> getBaseMapper();

    /**
     * 分页查询（条件为映射对象）
     *
     * Param page
     * Param param
     * Return PageInfo<T>
     */
    PageInfo<T> page(PageDomain page, T param);

    /**
     * 分页查询（条件为集合）
     *
     * Param page
     * Param param
     * Return PageInfo<T>
     */
    PageInfo<T> page(PageDomain page, Map<String, Object> map);

    /**
     * 查询（不分页，条件为映射对象）
     *
     * Param param
     * Return Collection<T>
     */
    List<T> list(T param);

    /**
     * 查询（不分页，条件为集合）
     *
     * Param param
     * Return
     */
    List<T> list(Map<String, Object> map);

    /**
     * 主键查询
     *
     * Param id
     * Return T
     */
    T queryById(Serializable id);

    /**
     * 保存
     *
     * Param param
     * Return boolean
     */
    boolean save(T param);

    /**
     * 批量保存
     *
     * Param params
     * Return boolean
     */
    boolean saveBatch(List<T> params);

    /**
     * 更新
     *
     * Param param
     * Return boolean
     */
    boolean update(T param);

    /**
     * 批量更新
     *
     * Param params
     * Return boolean
     */
    boolean updateBatch(List<T> params);

    /**
     * 删除
     *
     * Param id
     * Return boolean
     */
    boolean removeById(Serializable id);

    /**
     * 批量删除
     *
     * Param idList
     * Return boolean
     */
    boolean removeByIds(Collection<? extends Serializable> ids);
}
