
com.jpattern.orm.jdbctemplate.JdbcTemplateSqlPerformerStrategy Maven / Gradle / Ivy
package com.jpattern.orm.jdbctemplate;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.List;
import org.springframework.jdbc.core.BatchPreparedStatementSetter;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.PreparedStatementCreator;
import org.springframework.jdbc.support.GeneratedKeyHolder;
import org.springframework.jdbc.support.KeyHolder;
import com.jpattern.orm.exception.OrmException;
import com.jpattern.orm.session.ISqlPerformerStrategy;
import com.jpattern.orm.session.IGeneratedKeyReader;
import com.jpattern.orm.session.IPreparedStatementCreator;
import com.jpattern.orm.session.IResultSetReader;
import com.jpattern.orm.session.SqlSelectQuery;
/**
*
* @author Francesco Cina
*
* 02/lug/2011
*
* ISqlExecutor implementation using JdbcTemplate as backend
*/
public class JdbcTemplateSqlPerformerStrategy implements ISqlPerformerStrategy {
private final JdbcTemplate jdbcTemplate;
public JdbcTemplateSqlPerformerStrategy(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
@Override
public void execute(String sql, int timeout) throws OrmException {
int oldTimeout = jdbcTemplate.getQueryTimeout();
try {
jdbcTemplate.setQueryTimeout(timeout);
jdbcTemplate.execute(sql);
} catch (Exception e) {
throw new OrmException(e);
} finally {
jdbcTemplate.setQueryTimeout(oldTimeout);
}
}
@Override
public T query(SqlSelectQuery sqlSelectQuery, IResultSetReader rse) throws OrmException {
int oldMaxRows = sqlSelectQuery.getMaxRows();
int oldTimeout = sqlSelectQuery.getTimeout();
try {
jdbcTemplate.setMaxRows(sqlSelectQuery.getMaxRows());
jdbcTemplate.setQueryTimeout(sqlSelectQuery.getTimeout());
return jdbcTemplate.query(sqlSelectQuery.getSql(), sqlSelectQuery.getArgs() , new ResultSetReaderWrapper(rse) );
} catch (Exception e) {
throw new OrmException(e);
} finally {
jdbcTemplate.setMaxRows(oldMaxRows);
jdbcTemplate.setQueryTimeout(oldTimeout);
}
}
@Override
public int update(String sql, int timeout, Object... args) throws OrmException {
int oldTimeout = jdbcTemplate.getQueryTimeout();
try {
jdbcTemplate.setQueryTimeout(timeout);
return jdbcTemplate.update(sql, args);
} catch (Exception e) {
throw new OrmException(e);
} finally {
jdbcTemplate.setQueryTimeout(oldTimeout);
}
}
@Override
public int update(final String sql, int timeout, final IGeneratedKeyReader generatedKeyReader, final Object... args) throws OrmException {
int oldTimeout = jdbcTemplate.getQueryTimeout();
try {
PreparedStatementCreator psc = new PreparedStatementCreator() {
@Override
public PreparedStatement createPreparedStatement(Connection con) throws SQLException {
PreparedStatement ps = null;
ps = con.prepareStatement( sql , generatedKeyReader.generatedColumnNames());
int i = 0;
for (Object value : args ) {
ps.setObject(++i, value);
}
return ps;
}
};
KeyHolder keyHolder = new GeneratedKeyHolder();
jdbcTemplate.setQueryTimeout(timeout);
int result = jdbcTemplate.update(psc, keyHolder);
generatedKeyReader.read(new GeneratorKeyResultSet(keyHolder));
return result;
} catch (Exception e) {
throw new OrmException(e);
} finally {
jdbcTemplate.setQueryTimeout(oldTimeout);
}
}
@Override
public int[] batchUpdate(List sqls, int timeout) throws OrmException {
int oldTimeout = jdbcTemplate.getQueryTimeout();
try {
jdbcTemplate.setQueryTimeout(timeout);
return jdbcTemplate.batchUpdate(sqls.toArray(new String[0]));
} catch (Exception e) {
throw new OrmException(e);
} finally {
jdbcTemplate.setQueryTimeout(oldTimeout);
}
}
@Override
public int[] batchUpdate(final String sql, final List
© 2015 - 2025 Weber Informatics LLC | Privacy Policy