package com.htc.study.mybatis.dao;
import com.htc.study.mybatis.utils.daoUtils.MySqlHelper;
import com.htc.study.mybatis.utils.daoUtils.QueryEvent;
import org.apache.ibatis.session.ExecutorType;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
/**
* Created by lenovo on 2018/3/4.
*/
public class BaseDaoImpl<T, E> implements IBaseDao<T, E>
{
private static final Logger LOGS = LogManager.getLogger(BaseDaoImpl.class);
@Autowired
private transient SqlSession sqlSession;
@Autowired
private transient SqlSessionFactory sessionFactory;
public BaseDaoImpl() {
}
public SqlSessionFactory getSessionFactory() {
return this.sessionFactory;
}
public void setSessionFactory(SqlSessionFactory sessionFactorys) {
this.sessionFactory = sessionFactorys;
}
public void setSqlSessionTemplate(SqlSession sqlSession) {
this.sqlSession = sqlSession;
}
public SqlSession getSqlSessionTemplate() {
return this.sqlSession;
}
public int insert(T obj) {
return this.getSqlSessionTemplate().insert(MySqlHelper.getSQLName("insert", obj), obj);
}
public int delete(T obj) {
return this.getSqlSessionTemplate().delete(MySqlHelper.getSQLName("delete", obj), obj);
}
public int update(T obj) {
return this.getSqlSessionTemplate().update(MySqlHelper.getSQLName("update", obj), obj);
}
public T findById(T obj) {
return this.getSqlSessionTemplate().selectOne(MySqlHelper.getSQLName("findById", obj), obj);
}
public List<E> findAllIsPageByCustom(QueryEvent event) {
event.initParameter();
List object;
if(null != event.getStatement() && !"".equals(event.getStatement())) {
object = this.getSqlSessionTemplate().selectList(event.getStatement(), event.getParameter());
} else {
object = this.getSqlSessionTemplate().selectList(MySqlHelper.getSQLName("findAll", event.getObj()), event.getParameter());
}
return object;
}
public int batchInsert(T obj, String statement, List<E> list) {
if(null == statement || "".equals(statement)) {
if(null == obj) {
return 0;
}
statement = MySqlHelper.getSQLName("insert", obj);
}
SqlSession sqlSession = null;
byte e1;
try {
sqlSession = this.sessionFactory.openSession(ExecutorType.BATCH, false);
Iterator e = list.iterator();
while(e.hasNext()) {
Object e2 = e.next();
sqlSession.insert(statement, e2);
}
sqlSession.commit();
return 1;
} catch (Exception var10) {
LOGS.error("BaseDaoImpl.batchInsert", var10);
e1 = 0;
} finally {
if(null != sqlSession) {
sqlSession.close();
}
}
return e1;
}
public int batchDelete(T obj, Map<String, Object> map) {
return this.getSqlSessionTemplate().delete(MySqlHelper.getSQLName("batchDelete", obj), map);
}
public int batchUpdate(T obj, Map<String, Object> map) {
return this.getSqlSessionTemplate().update(MySqlHelper.getSQLName("batchUpdate", obj), map);
}
public Map<String, Object> executeProcedure(String statement, Map<String, Object> map) {
this.getSqlSessionTemplate().selectOne(statement, map);
return map;
}
public Object findOneByCustom(QueryEvent event) {
event.initParameter();
Object object = this.getSqlSessionTemplate().selectOne(event.getStatement(), event.getParameter());
return object;
}
public Object count(QueryEvent<T> event) {
event.initParameter();
return this.getSqlSessionTemplate().selectOne(event.getStatement(), event.getParameter());
}
public List<E> findAll(T obj) {
return this.getSqlSessionTemplate().selectList(MySqlHelper.getSQLName("findAll", obj), obj);
}
public int insert(String statement, Object obj) {
return this.getSqlSessionTemplate().insert(statement, obj);
}
public int delete(String statement, Object obj) {
return this.getSqlSessionTemplate().delete(statement, obj);
}
public int update(String statement, Object obj) {
return this.getSqlSessionTemplate().update(statement, obj);
}
}