मैंने विभिन्न प्रकार के डीएओ का परीक्षण किया है (मैं यहां कोड प्रकाशित नहीं करता क्योंकि यह बहुत गंदा है):
- हाइबरनेट के साथ :~200ms
- स्प्रिंग JDBCTemplate और RowMapper के साथ :~70 एमएस
- जावा स्टेटमेंट के साथ :~2 एमएस
- Java OracleStatement के साथ :~5 एमएस
- जावा तैयार स्टेटमेंट के साथ :~100ms
- जावा के साथ तैयार स्टेटमेंट को फ़ेच आकार =5000 के साथ समायोजित किया गया :~50ms
- Java OraclePreparedStatement के साथ :~100ms
- Java OraclePreparedStatement के साथ PreFetch आकार के साथ समायोजित =5000 :~170ms
नोट:
- डीएओ को नए क्लाइंटडाओ () के बजाय स्प्रिंग द्वारा इंजेक्ट किया गया :+30ms खो गया (-बीमार-)
- DB से कनेक्शन का समय:46ms
मैं उपयोग कर सकता था:
- मैन्युअल सैनिटाइज्ड फ़ील्ड के साथ जावा स्टेटमेंट।
- एप्लिकेशन लॉन्च पर प्री-कनेक्शन
- स्प्रिंग इंजेक्शन का इस्तेमाल न करें
लेकिन :
- वास्तव में सुरक्षित / सुरक्षित नहीं है
- पंक्तियों की एक छोटी संख्या के लिए तेज़, बड़ी संख्या में पंक्तियों पर परिणामसेट को इकाई में मैप करने में धीमा (मेरे पास यह उपयोग मामला भी है)
तो :
वसंत JDBCTemplate रोमैपर . के साथ विशिष्ट मामले पर प्रदर्शन बढ़ाने के लिए सबसे अच्छा समाधान प्रतीत होता है। और हम SQL प्रश्नों पर सुरक्षा रख सकते हैं। लेकिन ResultSet को Entity में बदलने के लिए विशिष्ट RowMapper लिखने की आवश्यकता है।
स्प्रिंग 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;
}
}
क्लाइंट रोमैपर का उदाहरण
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;
}
}
शायद बेहतर हो सकता है, किसी भी सुझाव का स्वागत है।