Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Wiosenna hibernacja JPA:wolne zapytanie SELECT

Testowałem różne typy DAO (nie publikuję tutaj kodu, ponieważ jest tak brudny) :

  • Z hibernacją :~200ms
  • Z (wstrzykiwaną) sprężyną JDBCTemplate i RowMapperem :~70 ms
  • Z oświadczeniem Java :~2 ms
  • Z Java OracleStatement :~5 ms
  • Z przygotowanym oświadczeniem Java :~100ms
  • Z Java PreparedStatement dostosowany do rozmiaru pobierania =5000 :~50ms
  • Z Java OraclePreparedStatement :~100ms
  • Z Java OraclePreparedStatement dostosowany do rozmiaru PreFetch =5000 :~170ms

Uwagi:

  • DAO wstrzykiwane przez Spring zamiast nowej ClientDao() :+30 ms utracone (-chory-)
  • Czas połączenia z bazą danych:46 ms

mógłbym użyć :

  • Oświadczenie Java z ręcznie oczyszczonymi polami.
  • Wstępne połączenie przy uruchomieniu aplikacji
  • Nie używaj wstrzykiwania sprężynowego

Ale :

  • Niezupełnie zabezpieczone/bezpieczne
  • Szybko dla małej liczby wierszy, powolne mapowanie zestawu wyników na encję w dużej liczbie wierszy (mam też ten przypadek użycia)

Więc :

Wiosna JDBCTemplate z RowMapperem wydaje się być najlepszym rozwiązaniem do zwiększenia wydajności w konkretnym przypadku.I możemy zachować bezpieczeństwo zapytań SQL.Ale trzeba napisać konkretny RowMapper, aby przekształcić zestaw wyników w jednostkę.

Przykład Spring JDBCTemplate

@Repository
public class ClientJdbcTemplateDao {


    private final Logger logger = LoggerFactory.getLogger(ClientJdbcTemplateDao.class);

    private JdbcTemplate jdbcTemplate;

    @Autowired
    public void setDataSource(DataSource dataSource) {
        this.jdbcTemplate = new JdbcTemplate(dataSource);
    }

    public List<Client> find() {
        List<Client> c = this.jdbcTemplate.query( "SELECT login FROM Client WHERE LOGIN='xxxx' AND PASSWORD='xxx'", new ClientRowMapper());
        return c;
    }
}

Przykład klienta RowMapper

public class ClientRowMapper implements RowMapper<Client> {

    @Override
    public Client mapRow(ResultSet arg0, int arg1) throws SQLException {
        // HERE IMPLEMENTS THE CONVERTER
        // Sample : 
        // String login = arg0.getString("LOGIN")
        // Client client = new Client(login);
        // return client;
    }
}

Może może być lepiej, każda sugestia jest mile widziana.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak rozwiązać błąd ORA-12516?

  2. ORA-01749:nie możesz PRZYZNAĆ/ODWOŁAĆ uprawnień do/od siebie

  3. Wybierz słowa między przecinkami (z wyłączeniem podwójnych cudzysłowów) za pomocą regexp_substr

  4. Wiosenna hibernacja JPA:wolne zapytanie SELECT

  5. Powielanie rekordów w celu wypełnienia luki między datami