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.