code: @Override
      public <T> List<T> executeSelect(IRowMapper<T> rowMapper, Connection conn, String sql,
              Map<String, ?> bindValues) {
          long timestampStart = System.currentTimeMillis();
          try {
              RowMapper<T> jRowMapper = new RowMapper<T>() {
                  @Override
                  public T mapRow(ResultSet rs, int rowNum) throws SQLException {
                      return rowMapper.mapRow(rs, rowNum);
                  }
              };
              PreparedStatementCreator psc = new PreparedStatementCreator() {
                  @Override
                  public PreparedStatement createPreparedStatement(Connection con)
                          throws SQLException {
                      return JdbcHelper.prepareAndBindNamedParamsStatement(conn, sql, bindValues);
                  }
              };
              JdbcTemplate jdbcTemplate = jdbcTemplate(conn);
              int fetchSize = getDefaultFetchSize();
              jdbcTemplate.setFetchSize(fetchSize < 0 ? Integer.MIN_VALUE : fetchSize);
              return jdbcTemplate.query(psc, jRowMapper);
          } catch (DataAccessException dae) {
              throw translateSQLException(dae);
          } finally {
              BaseDao.addProfiling(timestampStart, sql, System.currentTimeMillis() - timestampStart);
          }
      }
docs: {@inheritDoc}