package com.pm.common.config;

import org.apache.ibatis.session.ExecutorType;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.stereotype.Repository;

import javax.annotation.Resource;
import java.util.List;
import java.util.Map;

@Repository("daoSupport")
public class DaoSupport implements DAO {

	@Resource(name = "sqlSessionTemplate")
	private SqlSessionTemplate sqlSessionTemplate;

	/**
	 * 保存对象
	 * @param str
	 * @param obj
	 * @return
	 * @throws Exception
	 */
	public Integer save(String str, Object obj) throws Exception {
		return sqlSessionTemplate.insert(str, obj);
	}

	/**
	 * 批量更新
	 * @param str
	 * @param objs
	 * @return
	 * @throws Exception
	 */
	public Integer batchSave(String str, List<Map<?,?>> objs )throws Exception{
		return sqlSessionTemplate.insert(str, objs);
	}

	/**
	 * 修改对象
	 * @param str
	 * @param obj
	 * @return
	 * @throws Exception
	 */
	public Integer update(String str, Object obj) throws Exception {
		return sqlSessionTemplate.update(str, obj);
	}

	/**
	 * 批量更新
	 * @param str
	 * @param objs
	 * @return
	 * @throws Exception
	 */
	public void batchUpdate(String str, List<Map<?,?>> objs )throws Exception{
		SqlSessionFactory sqlSessionFactory = sqlSessionTemplate.getSqlSessionFactory();
		//批量执行器
		SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH,false);
		try{
			if(objs!=null){
				for(int i=0,size=objs.size();i<size;i++){
					sqlSession.update(str, objs.get(i));
				}
				sqlSession.flushStatements();
				sqlSession.commit();
				sqlSession.clearCache();
			}
		}finally{
			sqlSession.close();
		}
	}

	/**
	 * 批量更新
	 * @param str
	 * @param objs
	 * @return
	 * @throws Exception
	 */
	public Integer batchDelete(String str, List<Map<?,?>> objs )throws Exception{
		return sqlSessionTemplate.delete(str, objs);
	}

	/**
	 * 删除对象
	 * @param str
	 * @param obj
	 * @return
	 * @throws Exception
	 */
	public Integer delete(String str, Object obj) throws Exception {
		return sqlSessionTemplate.delete(str, obj);
	}

	/**
	 * 查找对象
	 * @param str
	 * @param obj
	 * @return
	 * @throws Exception
	 */
	public Object findForObject(String str, Object obj) throws Exception {
		return sqlSessionTemplate.selectOne(str, obj);
	}

	/**
	 * 查找对象
	 * @param str
	 * @param obj
	 * @return
	 * @throws Exception
	 */
	public Object findForList(String str, Object obj) throws Exception {
		return sqlSessionTemplate.selectList(str, obj);
	}

	/**
	 * 返回List集合
	 * @作者 LiXiangFei
	 * @返回值类型 int
	 * @创建时间 2024年09月24日 21:00:14
	 * @QQ号码 444141300
	 * @主页 http://www.fwtai.com
	 */
	public <E> List<E> selectList(final String statement) {
		return sqlSessionTemplate.selectList(statement);
	}

	/**
	 * 带参数的LIST
	 * @作者 LiXiangFei
	 * @返回值类型 int
	 * @创建时间 2024年09月24日 21:00:14
	 * @QQ号码 444141300
	 * @主页 http://www.fwtai.com
	 */
	public <E> List<E> selectList(final String statement, final Object parameter) {
		return sqlSessionTemplate.selectList(statement, parameter);
	}

	public Object findForMap(String str, Object obj, String key, String value) throws Exception {
		return sqlSessionTemplate.selectMap(str, obj, key);
	}
}
