package com.ym.mec.common.service;

/**
 * GenericService.java 
 * Copyright © 2015-2015
 * 
 * @author pengdc
 * @create 2015年7月13日
 */
import java.io.Serializable;
import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.*;

import com.ym.mec.common.page.PageInfo;
import com.ym.mec.common.page.QueryInfo;
import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.session.SqlSession;
import org.springframework.util.CollectionUtils;

public interface BaseService<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);

	/**
	 * 写入实体对象
	 * @author pengdc
	 * @param bean
	 * @return int
	 */
	public long insert(T bean);

	/**
	 * 通过参数查找所有结果集
	 * @author pengdc
	 * @param params
	 * @return
	 */
	public List<T> findAll(Map<String, Object> params);

	/**
	 * 通过参数查找结果集，适合分页场景
	 * @author pengdc
	 * @param params
	 * @return
	 */
	public PageInfo<T> queryPage(QueryInfo queryInfo);

	/**
	 * 通过参数查找结果集数目
	 * @author pengdc
	 * @param params
	 * @return
	 */
	public int findCount(Map<String, Object> params);

	/**
	 * @describe 获取columnKey-columnValue集合
	 * @author Joburgess
	 * @date 2020.06.23
	 * @param columnKey: key所对应的列名
	 * @param columnValue: value所对应的列名
	 * @param ids: key条件
	 * @return java.util.List<java.util.Map>
	 */
	<K extends Collection, Y, Z> Map<Y,Z> getMap(String tableName, String columnKey, String columnValue, K ids, Class<Y> keyType, Class<Z> valueType);

	/**
	 * @describe 获取columnKey-columnValue集合
	 * @author Joburgess
	 * @date 2020.06.23
	 * @param columnKey: key所对应的列名
	 * @param columnValue: value所对应的列名
	 * @param ids: key条件
	 * @return java.util.List<java.util.Map>
	 */
	<K extends List, Y, Z> Map<Y,Z> getMap(String tableName, String columnKey, String columnValue, String ids, Class<Y> keyType, Class<Z> valueType);

	/**
	 * @describe 获取columnKey-columnValue集合
	 * @author Joburgess
	 * @date 2020.06.23
	 * @param columnKey: key所对应的列名
	 * @param columnValue: value所对应的列名
	 * @return java.util.List<java.util.Map>
	 */
	<K extends List, Y, Z> Map<Y,Z> getMap(String tableName, String columnKey, String columnValue,Boolean hasDelFlag, Class<Y> keyType, Class<Z> valueType);


}
