code: @Override
      public <T> List<T> executeSelect(IRowMapper<T> rowMapper, Connection conn, String sql,
              Object... bindValues) {
          long timestampStart = System.currentTimeMillis();
          try {
              try (PreparedStatement pstm = conn.prepareStatement(sql, ResultSet.TYPE_FORWARD_ONLY,
                      ResultSet.CONCUR_READ_ONLY)) {
                  int fetchSize = getDefaultFetchSize();
                  pstm.setFetchSize(fetchSize < 0 ? Integer.MIN_VALUE : fetchSize);
                  JdbcHelper.bindParams(pstm, bindValues);
                  try (ResultSet rs = pstm.executeQuery()) {
                      List<T> result = new ArrayList<>();
                      int rowNum = 0;
                      while (rs.next()) {
                          result.add(rowMapper.mapRow(rs, rowNum));
                          rowNum++;
                      }
                      return result;
                  }
              }
          } catch (SQLException e) {
              throw translateSQLException(conn, "executeSelect", sql, e);
          } finally {
              BaseDao.addProfiling(timestampStart, sql, System.currentTimeMillis() - timestampStart);
          }
      }
docs: {@inheritDoc}