Saya telah menguji berbagai jenis DAO (Saya tidak mempublikasikan kode di sini karena sangat kotor) :
- Dengan Hibernasi :~200 md
- Dengan (Disuntikkan) Spring JDBCTemplate dan RowMapper :~70 md
- Dengan Pernyataan Java :~2 md
- Dengan Java OracleStatement :~5 md
- Dengan Pernyataan Siap Java :~100 md
- Dengan Java PreparedStatement disesuaikan dengan ukuran Fetch =5000 :~50 md
- Dengan Java OraclePreparedStatement :~100 md
- Dengan Java OraclePreparedStatement disesuaikan dengan ukuran PreFetch =5000 :~170 md
Catatan :
- DAO disuntikkan oleh Spring alih-alih New ClientDao() :+30 md hilang (-sakit-)
- Waktu koneksi ke DB :46ms
Saya bisa menggunakan :
- Pernyataan Java dengan bidang yang dibersihkan secara manual.
- Pra-koneksi pada peluncuran aplikasi
- Jangan gunakan Injeksi Pegas
Tapi :
- Tidak terlalu aman/aman
- Cepat untuk sejumlah kecil baris, lambat untuk memetakan ResultSet ke entitas pada sejumlah besar baris (Saya juga memiliki kasus penggunaan ini)
Jadi :
Templat JDBC Musim Semi dengan RowMapper tampaknya menjadi solusi terbaik untuk meningkatkan kinerja pada kasus tertentu. Dan kita dapat menjaga keamanan pada kueri SQL. Tetapi perlu menulis RowMapper tertentu untuk mengubah ResultSet menjadi Entity.
Contoh 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;
}
}
Contoh Client 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;
}
}
Mungkin bisa lebih baik, saran apa pun diterima.