SqlMapClientTemplate是SqlMapClient的封装类.
SqlMapClient中包含着session的管理.
SqlMapClientTemplate用于session的封装,以及异常的捕捉.
所以按照以上的推断来说.应该尽量使用SqlMapClientTemplate.
保证session以及Exception的正常以及统一.
SqlMapClientTemplate源码:
/* */ package org.springframework.orm.ibatis;
/* */
/* */ import com.ibatis.common.util.PaginatedList;
/* */ import com.ibatis.sqlmap.client.SqlMapClient;
/* */ import com.ibatis.sqlmap.client.SqlMapExecutor;
/* */ import com.ibatis.sqlmap.client.SqlMapSession;
/* */ import com.ibatis.sqlmap.client.event.RowHandler;
/* */ import com.ibatis.sqlmap.engine.impl.ExtendedSqlMapClient;
/* */ import com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate;
/* */ import java.sql.Connection;
/* */ import java.sql.SQLException;
/* */ import java.util.List;
/* */ import java.util.Map;
/* */ import javax.sql.DataSource;
/* */ import org.springframework.dao.DataAccessException;
/* */ import org.springframework.dao.InvalidDataAccessApiUsageException;
/* */ import org.springframework.jdbc.JdbcUpdateAffectedIncorrectNumberOfRowsException;
/* */ import org.springframework.jdbc.datasource.DataSourceUtils;
/* */ import org.springframework.jdbc.support.JdbcAccessor;
/* */ import org.springframework.jdbc.support.SQLExceptionTranslator;
/* */ import org.springframework.util.Assert;
/* */
/* */ public class SqlMapClientTemplate extends JdbcAccessor
/* */ implements SqlMapClientOperations
/* */ {
/* */ private SqlMapClient sqlMapClient;
/* */
/* */ public SqlMapClientTemplate()
/* */ {
/* */ }
/* */
/* */ public SqlMapClientTemplate(SqlMapClient sqlMapClient)
/* */ {
/* 101 */ setSqlMapClient(sqlMapClient);
/* 102 */ afterPropertiesSet();
/* */ }
/* */
/* */ public SqlMapClientTemplate(DataSource dataSource, SqlMapClient sqlMapClient)
/* */ {
/* 111 */ setDataSource(dataSource);
/* 112 */ setSqlMapClient(sqlMapClient);
/* 113 */ afterPropertiesSet();
/* */ }
/* */
/* */ public void setSqlMapClient(SqlMapClient sqlMapClient)
/* */ {
/* 120 */ this.sqlMapClient = sqlMapClient;
/* */ }
/* */
/* */ public SqlMapClient getSqlMapClient()
/* */ {
/* 127 */ return this.sqlMapClient;
/* */ }
/* */
/* */ public DataSource getDataSource()
/* */ {
/* 135 */ DataSource ds = super.getDataSource();
/* 136 */ return ds != null ds : this.sqlMapClient.getDataSource();
/* */ }
/* */
/* */ public void afterPropertiesSet() {
/* 140 */ if (this.sqlMapClient == null) {
/* 141 */ throw new IllegalArgumentException("sqlMapClient is required");
/* */ }
/* 143 */ super.afterPropertiesSet();
/* */ }
/* */
/* */ public Object execute(SqlMapClientCallback action)
/* */ throws DataAccessException
/* */ {
/* 154 */ Assert.notNull(this.sqlMapClient, "No SqlMapClient specified");
/* */
/* 163 */ SqlMapSession session = this.sqlMapClient.openSession();
/* */ try {
/* 165 */ Connection con = DataSourceUtils.getConnection(getDataSource());
/* */ try {
/* 167 */ session.setUserConnection(con);
/* 168 */ Object localObject1 = action.doInSqlMapClient(session);
/* */
/* 174 */ DataSourceUtils.releaseConnection(con, getDataSource());
/* */
/* 178 */ session.close();
/* 179 */ return localObject1;
/* */ }
/* */ catch (SQLException ex)
/* */ {
/* 171 */ throw getExceptionTranslator().translate("Sq