package com.ucar.eser.core.ibatis; import com.ibatis.sqlmap.client.SqlMapClient; import com.ibatis.sqlmap.client.SqlMapExecutor; import com.ucar.eser.core.util.exception.FrameworkRuntimeException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.dao.support.DaoSupport; import org.springframework.orm.ibatis.SqlMapClientCallback; import org.springframework.orm.ibatis.SqlMapClientTemplate; import javax.sql.DataSource; import java.sql.Connection; import java.sql.SQLException; import java.util.List; /** * * Created by wangjiulin on 2017/10/20. */ public class IbatisDaoImpl extends DaoSupport implements IbatisDao { private static final Logger LOGGER = LoggerFactory.getLogger(IbatisDaoImpl.class); private SqlMapClientTemplate sqlMapClientTemplate; public void setSqlMapClient(SqlMapClient sqlMapClient) { this.sqlMapClientTemplate.setSqlMapClient(sqlMapClient); } public IbatisDaoImpl(boolean isProxy) { this.sqlMapClientTemplate = new SqlMapClientTemplate(); } public final void setSqlMapClientTemplate(SqlMapClientTemplate sqlMapClientTemplate) { if (sqlMapClientTemplate == null) { throw new IllegalArgumentException("Cannot set sqlMapClientTemplate to null"); } else { this.sqlMapClientTemplate = sqlMapClientTemplate; } } public void setDataSource(DataSource dataSource) { this.sqlMapClientTemplate.setDataSource(dataSource); } public final DataSource getDataSource() { return this.sqlMapClientTemplate != null ? this.sqlMapClientTemplate.getDataSource() : null; } protected SqlMapClientTemplate getSqlMapClientTemplate() { return this.sqlMapClientTemplate; } public int deleteObject(String statementName, Object obj) { int i = this.getSqlMapClientTemplate().delete(statementName, obj); return i; } public Object insert(String statementName, Object obj) { Object object = this.getSqlMapClientTemplate().insert(statementName, obj); return object; } public int update(String statementName, Object obj) { return this.getSqlMapClientTemplate().update(statementName, obj); } public List queryForList(String statementSql) { return this.getSqlMapClientTemplate().queryForList(statementSql); } public List queryForList(String statementSql, Object obj) { return this.getSqlMapClientTemplate().queryForList(statementSql, obj); } public List queryForList(String statementSql, Object obj, int start, int end) { return this.getSqlMapClientTemplate().queryForList(statementSql, obj, start, end); } public Object queryForObject(String statementSql) { return this.getSqlMapClientTemplate().queryForObject(statementSql); } public Object queryForObject(String statmentSql, Object obj) { return this.getSqlMapClientTemplate().queryForObject(statmentSql, obj); } public Integer batchInsert(final String statementName, final List list) { Integer result = Integer.valueOf(0); try { if (list != null) { result = (Integer) this.getSqlMapClientTemplate().execute(new SqlMapClientCallback() { public Object doInSqlMapClient(SqlMapExecutor executor) throws SQLException { executor.startBatch(); try { int e = 0; for (int n = list.size(); e < n; ++e) { executor.insert(statementName, list.get(e)); if ((e + 1) % 10000 == 0) { executor.executeBatch(); executor.startBatch(); } } executor.executeBatch(); return Integer.valueOf(list.size()); } catch (SQLException var5) { executor.executeBatch(); throw var5; } } }); } return result; } catch (Exception var5) { LOGGER.error("批量插入数据异常", var5); throw new FrameworkRuntimeException(var5); } } public Integer batchUpdate(final String statementName, final List list) { Integer result = Integer.valueOf(0); try { if (list != null) { result = (Integer) this.getSqlMapClientTemplate().execute(new SqlMapClientCallback() { public Object doInSqlMapClient(SqlMapExecutor executor) throws SQLException { executor.startBatch(); int i = 0; for (int n = list.size(); i < n; ++i) { executor.update(statementName, list.get(i)); if ((i + 1) % 10000 == 0) { executor.executeBatch(); executor.startBatch(); } } executor.executeBatch(); return Integer.valueOf(list.size()); } }); } return result; } catch (Exception var5) { LOGGER.error("批量更新数据异常", var5); throw new FrameworkRuntimeException(var5); } } public Integer batchDelete(final String statementName, final List list) { Integer result = Integer.valueOf(0); try { if (list != null) { result = (Integer) this.getSqlMapClientTemplate().execute(new SqlMapClientCallback() { public Object doInSqlMapClient(SqlMapExecutor executor) throws SQLException { executor.startBatch(); int i = 0; for (int n = list.size(); i < n; ++i) { executor.delete(statementName, list.get(i)); if (i % 10000 == 0) { executor.executeBatch(); executor.startBatch(); } } executor.executeBatch(); return Integer.valueOf(list.size()); } }); } return result; } catch (Exception var5) { LOGGER.error("批量删除数据异常", var5); throw new FrameworkRuntimeException(var5); } } public Connection getConnection() throws SQLException { return this.getSqlMapClientTemplate().getDataSource().getConnection(); } public List queryForList(String statementSql, boolean isDBProxy) { return this.getSqlMapClientTemplate().queryForList(statementSql, isDBProxy); } public List queryForList(String statementSql, Object obj, boolean isDBProxy) { return this.getSqlMapClientTemplate().queryForList(statementSql, obj); } public List queryForList(String statementSql, Object obj, int start, int end, boolean isDBProxy) { return this.getSqlMapClientTemplate().queryForList(statementSql, obj, start, end); } public Object queryForObject(String statementSql, boolean isDBProxy) { return this.getSqlMapClientTemplate().queryForObject(statementSql, isDBProxy); } public Object queryForObject(String statmentSql, Object obj, boolean isDBProxy) { return this.getSqlMapClientTemplate().queryForObject(statmentSql, obj, isDBProxy); } @Override protected void checkDaoConfig() throws IllegalArgumentException { } }