package com.elab.core.services;

import com.elab.core.bean.PageModel;
import org.springframework.jdbc.core.RowMapper;

import java.util.List;

/**
 * 单表增删改查业务处理
 *
 * @author : liukx
 * @create : 2018/5/17 10:00
 * @email : liukx@elab-plus.com
 */
public interface ICommonService<T> {

    /**
     * 插入一个对象
     *
     * @param obj 对象内容 必须是构造参数
     * @return
     * @throws Exception
     */
    public int insert(T obj) throws Exception;

    /**
     * 根据主键修改内容
     *
     * @param obj
     * @return
     * @throws Exception
     */
    public int updateById(T obj) throws Exception;

    /**
     * 删除一个对象
     *
     * @param obj
     * @return
     * @throws Exception
     */
//    public int delete(T obj) throws Exception;

    /**
     * 查询一个对象
     *
     * @param obj
     * @return
     * @throws Exception
     */
    public T selectByObject(T obj) throws Exception;

    /**
     * 根据主键查询对象
     *
     * @param id
     * @return
     * @throws Exception
     */
    public T selectById(String id) throws Exception;

    /**
     * 查询一个集合,参数可以是任意的
     *
     * @param obj
     * @return
     * @throws Exception
     */
    public List<T> selectByList(T obj) throws Exception;

    /**
     * 查询一个分页集合
     *
     * @param pageModel 分页参数
     * @param o         查询字段
     * @return
     * @throws Exception
     */
    public PageModel<T> selectByPage(PageModel pageModel, T o) throws Exception;


    /**
     * 查询一个Mapper对象
     * 功能描述: 查询一个由RowMapper封装的返回结果对象
     * 不调用反射去构建一个Bean对象,把set赋值操作交给用户
     *
     * @param obj       entity对象
     * @param rowMapper 实现了RowMapper接口的对象,参数映射会回调该类的方法
     * @return
     * @throws Exception
     */
    public List<T> selectByMapper(T obj, RowMapper<T> rowMapper) throws Exception;


}
