package com.yonge.toolset.mybatis.dal;

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

/**
 * DAO操作基类
 */
public interface BaseDAO<PK extends Serializable, T>{

	/**
	 * 通过主键id获取对象
	 * @author pengdc
	 * @param id
	 * @return T
	 */
	public T get(final PK id);

	/**
	 * 更新实体对象
	 * @author pengdc
	 * @param bean
	 * @return int
	 */
	public int update(T bean);

	/**
	 * 通过主键id删除对象
	 * @author pengdc
	 * @param id
	 * @return int
	 */
	public int delete(final PK id);

    /**
     * 删除对象
     * @param bean
     * @return
     */
    public int delete(T bean);
	
	/**
	 * 写入实体对象
	 * @author pengdc
	 * @param bean
	 * @return int
	 */
	public long insert(T bean);
	/**
	 * 通过参数查找所有结果集
	 * @author pengdc
	 * @param params
	 * @return
	 */
	public List<T> findAll(Map<String, Object> params);
    /**
     * 通过参数查找所有结果集，也适合分页
     * @param entity
     * @return
     */
    public List<T> findList(T entity);
	/**
	 * 通过参数查找结果集，适合分页场景
	 * @author pengdc
	 * @param params
	 * @return
	 */
	public List<T> queryPage(Map<String, Object> params);
	/**
	 * 通过参数查找结果集数目
	 * @author pengdc
	 * @param params
	 * @return
	 */
	public int queryCount(Map<String, Object> params);
}
