JdbcTemplateWrapperTenantImpl.java 11.9 KB
package com.taover.repository.jdbctemplate;

import java.util.Collection;
import java.util.List;
import java.util.Map;

import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.BatchPreparedStatementSetter;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.ParameterizedPreparedStatementSetter;
import org.springframework.jdbc.core.PreparedStatementCallback;
import org.springframework.jdbc.core.PreparedStatementSetter;
import org.springframework.jdbc.core.ResultSetExtractor;
import org.springframework.jdbc.core.RowCallbackHandler;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.support.rowset.SqlRowSet;

import com.taover.repository.exception.NoShardingKeyException;

public class JdbcTemplateWrapperTenantImpl implements JdbcTemplateWrapperTenant {
	private JdbcTemplate jdbcTemplate;
	public JdbcTemplateWrapperTenantImpl(JdbcTemplate jdbcTemplate) {
		this.jdbcTemplate = jdbcTemplate;
	}

	@Override
	public void doCheckTenantId(String sql, Long shardingKey) throws NoShardingKeyException {
		
	}
	
	@Override
	public JdbcTemplate getJdbcTemplate() {
		return this.jdbcTemplate;
	}
	
	@Override
	public void execute(String sql, Long shardingKey) throws DataAccessException {
		this.doCheckTenantId(sql, shardingKey);
		this.jdbcTemplate.execute(sql);
	}

	@Override
	public <E> E query(String sql, ResultSetExtractor<E> rse, Long shardingKey) throws DataAccessException {
		this.doCheckTenantId(sql, shardingKey);
		return this.jdbcTemplate.query(sql, rse);
	}

	@Override
	public void query(String sql, RowCallbackHandler rch, Long shardingKey) throws DataAccessException {
		this.doCheckTenantId(sql, shardingKey);
		this.jdbcTemplate.query(sql, rch);
	}

	@Override
	public <E> List<E> query(String sql, RowMapper<E> rowMapper, Long shardingKey) throws DataAccessException {
		this.doCheckTenantId(sql, shardingKey);
		return this.jdbcTemplate.query(sql, rowMapper);
	}

	@Override
	public <E> E queryForObject(String sql, RowMapper<E> rowMapper, Long shardingKey) throws DataAccessException {
		this.doCheckTenantId(sql, shardingKey);
		return this.jdbcTemplate.queryForObject(sql, rowMapper);
	}

	@Override
	public <E> E queryForObject(String sql, Class<E> requiredType, Long shardingKey) throws DataAccessException {
		this.doCheckTenantId(sql, shardingKey);
		return this.jdbcTemplate.queryForObject(sql, requiredType);
	}

	@Override
	public Map<String, Object> queryForMap(String sql, Long shardingKey) throws DataAccessException {
		this.doCheckTenantId(sql, shardingKey);
		return this.jdbcTemplate.queryForMap(sql);
	}

	@Override
	public <E> List<E> queryForList(String sql, Class<E> elementType, Long shardingKey) throws DataAccessException {
		this.doCheckTenantId(sql, shardingKey);
		return this.jdbcTemplate.queryForList(sql, elementType);
	}

	@Override
	public List<Map<String, Object>> queryForList(String sql, Long shardingKey) throws DataAccessException {
		return this.jdbcTemplate.queryForList(sql);
	}

	@Override
	public SqlRowSet queryForRowSet(String sql, Long shardingKey) throws DataAccessException {
		this.doCheckTenantId(sql, shardingKey);
		return this.jdbcTemplate.queryForRowSet(sql);
	}

	@Override
	public int update(String sql, Long shardingKey) throws DataAccessException {
		return this.jdbcTemplate.update(sql);
	}

	@Override
	public int[] batchUpdate(Long shardingKey, String... sql) throws DataAccessException {
		for(String item: sql) {
			this.doCheckTenantId(item, shardingKey);
		}
		return this.jdbcTemplate.batchUpdate(sql);
	}

	@Override
	public <E> E execute(String sql, PreparedStatementCallback<E> action, Long shardingKey) throws DataAccessException {
		this.doCheckTenantId(sql, shardingKey);
		return this.jdbcTemplate.execute(sql, action);
	}

	@Override
	public <E> E query(String sql, PreparedStatementSetter pss, ResultSetExtractor<E> rse, Long shardingKey)
			throws DataAccessException {
		this.doCheckTenantId(sql, shardingKey);
		return this.jdbcTemplate.query(sql, pss, rse);
	}

	@Override
	public <E> E query(String sql, Object[] args, int[] argTypes, ResultSetExtractor<E> rse, Long shardingKey)
			throws DataAccessException {
		this.doCheckTenantId(sql, shardingKey);
		return this.jdbcTemplate.query(sql, args, argTypes, rse);
	}

	@Override
	public <E> E query(String sql, Object[] args, ResultSetExtractor<E> rse, Long shardingKey) throws DataAccessException {
		this.doCheckTenantId(sql, shardingKey);
		return this.jdbcTemplate.query(sql, args, rse);
	}

	@Override
	public <E> E query(String sql, ResultSetExtractor<E> rse, Long shardingKey, Object... args) throws DataAccessException {		
			this.doCheckTenantId(sql, shardingKey);
			return this.jdbcTemplate.query(sql, rse, args);
	}

	@Override
	public void query(String sql, PreparedStatementSetter pss, RowCallbackHandler rch, Long shardingKey)
			throws DataAccessException {
		this.doCheckTenantId(sql, shardingKey);
		this.jdbcTemplate.query(sql, pss, rch);
	}

	@Override
	public void query(String sql, Object[] args, int[] argTypes, RowCallbackHandler rch, Long shardingKey)
			throws DataAccessException {		
		this.doCheckTenantId(sql, shardingKey);
		this.jdbcTemplate.query(sql, args, argTypes, rch);
	}

	@Override
	public void query(String sql, Object[] args, RowCallbackHandler rch, Long shardingKey) throws DataAccessException {
		this.doCheckTenantId(sql, shardingKey);
		this.jdbcTemplate.query(sql, args, rch);
	}

	@Override
	public void query(String sql, RowCallbackHandler rch, Long shardingKey, Object... args) throws DataAccessException {
		this.doCheckTenantId(sql, shardingKey);
		this.jdbcTemplate.query(sql, rch, args);
	}

	@Override
	public <E> List<E> query(String sql, PreparedStatementSetter pss, RowMapper<E> rowMapper, Long shardingKey)
			throws DataAccessException {
		this.doCheckTenantId(sql, shardingKey);
		return this.jdbcTemplate.query(sql, pss, rowMapper);
	}

	@Override
	public <E> List<E> query(String sql, Object[] args, int[] argTypes, RowMapper<E> rowMapper, Long shardingKey)
			throws DataAccessException {
		this.doCheckTenantId(sql, shardingKey);
		return this.jdbcTemplate.query(sql, args, argTypes, rowMapper);
	}

	@Override
	public <E> List<E> query(String sql, Object[] args, RowMapper<E> rowMapper, Long shardingKey)
			throws DataAccessException {
		this.doCheckTenantId(sql, shardingKey);
		return this.jdbcTemplate.query(sql, args, rowMapper);
	}

	@Override
	public <E> List<E> query(String sql, RowMapper<E> rowMapper, Long shardingKey, Object... args)
			throws DataAccessException {		
		this.doCheckTenantId(sql, shardingKey);
		return this.jdbcTemplate.query(sql, rowMapper, args);
	}

	@Override
	public <E> E queryForObject(String sql, Object[] args, int[] argTypes, RowMapper<E> rowMapper, Long shardingKey)
			throws DataAccessException {		
		this.doCheckTenantId(sql, shardingKey);
		return this.jdbcTemplate.queryForObject(sql, args, argTypes, rowMapper);
	}

	@Override
	public <E> E queryForObject(String sql, Object[] args, RowMapper<E> rowMapper, Long shardingKey)
			throws DataAccessException {
		this.doCheckTenantId(sql, shardingKey);
		return this.jdbcTemplate.queryForObject(sql, args, rowMapper);
	}

	@Override
	public <E> E queryForObject(String sql, RowMapper<E> rowMapper, Long shardingKey, Object... args)
			throws DataAccessException {
		this.doCheckTenantId(sql, shardingKey);
		return this.jdbcTemplate.queryForObject(sql, rowMapper, args);
	}

	@Override
	public <E> E queryForObject(String sql, Object[] args, int[] argTypes, Class<E> requiredType, Long shardingKey)
			throws DataAccessException {		
		this.doCheckTenantId(sql, shardingKey);
		return this.jdbcTemplate.queryForObject(sql, args, argTypes, requiredType);
	}

	@Override
	public <E> E queryForObject(String sql, Object[] args, Class<E> requiredType, Long shardingKey)
			throws DataAccessException {		
		this.doCheckTenantId(sql, shardingKey);
		return this.jdbcTemplate.queryForObject(sql, args, requiredType);
	}

	@Override
	public <E> E queryForObject(String sql, Class<E> requiredType, Long shardingKey, Object... args)
			throws DataAccessException {		
		this.doCheckTenantId(sql, shardingKey);
		return this.jdbcTemplate.queryForObject(sql, requiredType, args);
	}

	@Override
	public Map<String, Object> queryForMap(String sql, Object[] args, int[] argTypes, Long shardingKey)
			throws DataAccessException {
		this.doCheckTenantId(sql, shardingKey);
		return this.jdbcTemplate.queryForMap(sql, args, argTypes);
	}

	@Override
	public Map<String, Object> queryForMap(String sql, Long shardingKey, Object... args) throws DataAccessException {
		this.doCheckTenantId(sql, shardingKey);
		return this.jdbcTemplate.queryForMap(sql, args);
	}

	@Override
	public <E> List<E> queryForList(String sql, Object[] args, int[] argTypes, Class<E> elementType, Long shardingKey)
			throws DataAccessException {		
		this.doCheckTenantId(sql, shardingKey);
		return this.jdbcTemplate.queryForList(sql, args, argTypes, elementType);
	}

	@Override
	public <E> List<E> queryForList(String sql, Object[] args, Class<E> elementType, Long shardingKey)
			throws DataAccessException {		
		this.doCheckTenantId(sql, shardingKey);
		return this.jdbcTemplate.queryForList(sql, args, elementType);
	}

	@Override
	public <E> List<E> queryForList(String sql, Class<E> elementType, Long shardingKey, Object... args)
			throws DataAccessException {
		this.doCheckTenantId(sql, shardingKey);
		return this.jdbcTemplate.queryForList(sql, elementType, args);
	}

	@Override
	public List<Map<String, Object>> queryForList(String sql, Object[] args, int[] argTypes, Long shardingKey)
			throws DataAccessException {
		this.doCheckTenantId(sql, shardingKey);
		return this.jdbcTemplate.queryForList(sql, args, argTypes);
	}

	@Override
	public List<Map<String, Object>> queryForList(String sql, Long shardingKey, Object... args)
			throws DataAccessException {		
		this.doCheckTenantId(sql, shardingKey);
		return this.jdbcTemplate.queryForList(sql, args);
	}

	@Override
	public SqlRowSet queryForRowSet(String sql, Object[] args, int[] argTypes, Long shardingKey)
			throws DataAccessException {		
		this.doCheckTenantId(sql, shardingKey);
		return this.jdbcTemplate.queryForRowSet(sql, args, argTypes);
	}

	@Override
	public SqlRowSet queryForRowSet(String sql, Long shardingKey, Object... args) throws DataAccessException {
		this.doCheckTenantId(sql, shardingKey);
		return this.jdbcTemplate.queryForRowSet(sql, args);
	}

	@Override
	public int update(String sql, PreparedStatementSetter pss, Long shardingKey) throws DataAccessException {
		this.doCheckTenantId(sql, shardingKey);
		return this.jdbcTemplate.update(sql, pss);
	}

	@Override
	public int update(String sql, Object[] args, int[] argTypes, Long shardingKey) throws DataAccessException {
		this.doCheckTenantId(sql, shardingKey);
		return this.jdbcTemplate.update(sql, args, argTypes);
	}

	@Override
	public int update(String sql, Long shardingKey, Object... args) throws DataAccessException {
		this.doCheckTenantId(sql, shardingKey);
		return this.jdbcTemplate.update(sql, args);
	}

	@Override
	public int[] batchUpdate(String sql, BatchPreparedStatementSetter pss, Long shardingKey) throws DataAccessException {
		this.doCheckTenantId(sql, shardingKey);
		return this.jdbcTemplate.batchUpdate(sql, pss);
	}

	@Override
	public int[] batchUpdate(String sql, List<Object[]> batchArgs, Long shardingKey) throws DataAccessException {
		this.doCheckTenantId(sql, shardingKey);
		return this.jdbcTemplate.batchUpdate(sql, batchArgs);
	}

	@Override
	public int[] batchUpdate(String sql, List<Object[]> batchArgs, int[] argTypes, Long shardingKey)
			throws DataAccessException {		
		this.doCheckTenantId(sql, shardingKey);
		return this.jdbcTemplate.batchUpdate(sql, batchArgs);
	}

	@Override
	public <E> int[][] batchUpdate(String sql, Collection<E> batchArgs, int batchSize,
			ParameterizedPreparedStatementSetter<E> pss, Long shardingKey) throws DataAccessException {
		this.doCheckTenantId(sql, shardingKey);
		return this.jdbcTemplate.batchUpdate(sql, batchArgs, batchSize, pss);		
	}
}