Tôi đã thử nghiệm các loại DAO khác nhau (Tôi không xuất bản mã ở đây vì nó quá bẩn):
- Với Hibernate :~ 200ms
- Với Spring JDBCTemplate và RowMapper :~ 70 mili giây
- Với Câu lệnh Java :~ 2 mili giây
- Với Java OracleStatement :~ 5 mili giây
- Với Java PreparedStatement :~ 100ms
- Với Java PreparedStatement được điều chỉnh với kích thước Tìm nạp =5000 :~ 50ms
- Với Java OraclePreparedStatement :~ 100ms
- Với Java OraclePreparedStatement được điều chỉnh với kích thước Tìm nạp trước =5000:~ 170 mili giây
Ghi chú:
- DAO được đưa vào bởi Spring thay vì ClientDao () mới :+ 30ms bị mất (-sick-)
- Thời gian kết nối với DB:46ms
Tôi có thể sử dụng:
- Câu lệnh Java với các trường được làm sạch thủ công.
- Kết nối trước khi khởi chạy ứng dụng
- Không sử dụng Spring Injection
Nhưng:
- Không thực sự bảo mật / an toàn
- Nhanh đối với một số lượng nhỏ hàng, chậm ánh xạ ResultSet thành thực thể trên một số lượng lớn hàng (tôi cũng có trường hợp sử dụng này)
Vì vậy:
Spring JDBCTemplate với RowMapper dường như là giải pháp tốt nhất để tăng hiệu suất trong từng trường hợp cụ thể và chúng ta có thể giữ an toàn cho các truy vấn SQL nhưng cần phải viết RowMapper cụ thể để chuyển đổi ResultSet thành Entity.
Ví dụ về 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;
}
}
Ví dụ về 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;
}
}
Có lẽ có thể tốt hơn, mọi đề xuất đều được hoan nghênh.