package com.hzya.frame.basedao.dao;


import com.hzya.frame.page.PageAttribute;

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


public interface IBaseDao<E extends Serializable, PK extends Serializable> {

   /**
    * 查询一个对象
    * @param paramPK  主键ID
    * @return
    */
    E get(PK paramPK);

   /**
    * 获取所有的结果集
    * @return
    */
    List<E> getAll();

   /**
    * 查询一个对象
    * @param paramString  mapper ID
    * @param paramObject  查询条件
    * @return
    */
    Object selectOne(String paramString, Object paramObject);

   /**
    * 查询一个List
    * @param paramString mapper ID
    * @param paramObject  查询条件
    * @return
    */
    List<?> selectList(String paramString, Object paramObject);

   /**
    * 逻辑删除 ，sts置为 N
    * @param o
    * @return
    */
    int logicRemove(E o);

   /**
    * 逻辑删除 ，sts置为 N
    * @param o 多个条件
    * @return
    */
    int logicRemoveMultiCondition(E o);
    /****
     * @Content:多条件删除数据，设置数据状态STS为N
     * @Author 👻👻👻👻👻👻👻👻 gjh
     * @Date  2023-07-24 11:26
     * @Param [id, o]
     * @return int
     **/
    int logicRemoveMultiCondition(String id,E o);
   /**
    * 物理删除
    * @param paramPK 主键ID
    * @return
    */
    int delete(PK paramPK);

   /**
    * 物理删除
    * @param paramString  sqlMapperID
    * @param paramObject 条件参数
    * @return
    */
    int delete(String paramString, Object paramObject);
   /**
    *  修改
    * @param paramString  sqlMapperID
    * @param paramObject 条件参数
    * @return
    */
    int update(String paramString, Object paramObject);

   /**
    * 条件查询一个对象
    * @param paramE  条件参数
    * @return
    */
    E queryOne(E paramE);

   /**
    * 插入数据或者修改数据（ID为空是插入，ID不为空是修改）
    * @param paramE
    * @return
    */
    E saveOrUpdate(E paramE);

   /**
    * 保存方法
    * @param paramE
    * @return
    */
    E save(E paramE);
    /**
     * 保存方法
     * @param paramString  id
     * @param paramE		entitty
     * @return
     */
    E save(String paramString, E paramE);


    /****
     * @Content:保存方法
     * @Author 👻👻👻👻👻👻👻👻 gjh
     * @Date  2023-07-24 11:41
     * @Param [paramString, paramE]
     * @return java.lang.Integer
     **/
    Integer insert(String paramString, Object paramE);

   /**
    * 修改方法
    * @param paramE
    * @return
    */
    E update(E paramE);

   /**
    * 查询单个对象
    * @param paramE  条件参数
    * @param paramString  mapperID
    * @return
    */
    E query(E paramE, String paramString);

   /**
    * 查询一个List
    * @param paramE 条件参数
    * @param paramString msqpperID
    * @return
    */
    List<E> queryList(E paramE, String paramString);
   /**
    * 查询一个List
    * @param paramE 条件参数
    * @return
    */
    List<E> queryBase(E paramE);

   /**
    * 查询结果集
    * @param paramE  条件参数
    * @return
    */
    List<E> query(E paramE);


   /**
    * wehere条件为 like
    * @param paramE 条件参数
    * @return
    */
    List<E> queryByLike(E paramE);

   /**
    * where条件为or
    * @param paramE
    * @return
    */
    List<E> queryByOr(E paramE);

   /**
    * 获取数据条数
    * @param paramE  条件参数
    * @return
    */
    Integer getCount(E paramE);

    Integer getCount(String statement,Object baseEntity);

   /**
    * 分页查询
    * @param paramString mapperID
    * @param paramObject  条件参数
    * @return
    */
    PageAttribute<E> queryPaged(String paramString, Object paramObject);

   /**
    * 分页查询
    * @param paramObject 条件参数
    * @return
    */
    PageAttribute<E> queryPaged(Object paramObject);

   /**
    * 判断是否重复
    * @param paramE  参数条件
    * @return
    */
    boolean checkRepeated(E paramE);
}
