स्प्रिंग - JDBC फ्रेमवर्क अवलोकन
सादे पुराने JDBC का उपयोग करते हुए डेटाबेस के साथ काम करते समय, अपवादों को संभालने, खोलने और समापन करने के लिए अनावश्यक कोड लिखना बोझिल हो जाता है, हालांकि, स्प्रिंग JDBC फ्रेमवर्क कनेक्शन खोलने से शुरू होने वाले सभी निम्न-स्तरीय विवरणों का ध्यान रखता है, तैयारी करें और SQL कथन, प्रक्रिया अपवादों को निष्पादित करें, लेनदेन को संभालें और अंत में कनेक्शन को बंद करें।
इसलिए आपको जो करना है वह सिर्फ कनेक्शन मापदंडों को परिभाषित करें और SQL स्टेटमेंट को निष्पादित करने के लिए निर्दिष्ट करें और डेटाबेस से डेटा प्राप्त करते समय प्रत्येक पुनरावृत्ति के लिए आवश्यक कार्य करें।
स्प्रिंग JDBC डेटाबेस के साथ इंटरफेस करने के लिए कई दृष्टिकोण और इसी तरह अलग-अलग कक्षाएं प्रदान करता है। मैं क्लासिक और सबसे लोकप्रिय दृष्टिकोण लेने जा रहा हूं जो इसका उपयोग करता हैJdbcTemplateढांचे का वर्ग। यह केंद्रीय ढांचा वर्ग है जो सभी डेटाबेस संचार और अपवाद हैंडलिंग का प्रबंधन करता है।
JdbcTemplate क्लास
JDBC टेम्प्लेट वर्ग SQL प्रश्नों, अपडेट स्टेटमेंट्स, स्टोर प्रक्रिया कॉल को निष्पादित करता है, ResultSets पर पुनरावृत्ति करता है, और अर्क पैरामीटर मान लौटाता है। यह JDBC अपवादों को भी पकड़ता है और उन्हें org.springframework.dao पैकेज में परिभाषित सामान्य, अधिक जानकारीपूर्ण, अपवाद पदानुक्रम में अनुवाद करता है।
के उदाहरण JdbcTemplate वर्ग के हैं threadsafe एक बार कॉन्फ़िगर किया गया। तो आप JdbcTemplate के एकल उदाहरण को कॉन्फ़िगर कर सकते हैं और फिर इस साझा संदर्भ को कई DAO में सुरक्षित रूप से इंजेक्ट कर सकते हैं ।
JDBC टेम्प्लेट क्लास का उपयोग करते समय एक सामान्य अभ्यास आपकी स्प्रिंग कॉन्फ़िगरेशन फ़ाइल में एक DataSource को कॉन्फ़िगर करना है, और उसके बाद निर्भरता-इंजेक्शन जो आपके DAO वर्गों में साझा DataSource बीन, और JdbcTemplate DataSource के लिए सेट्टर में बनाया गया है।
डेटा स्रोत को कॉन्फ़िगर करना
आइए हम एक डेटाबेस तालिका बनाते हैं Student हमारे डेटाबेस में TEST। हम मानते हैं कि आप MySQL डेटाबेस के साथ काम कर रहे हैं, यदि आप किसी अन्य डेटाबेस के साथ काम करते हैं तो आप अपने DDL और SQL प्रश्नों को तदनुसार बदल सकते हैं।
CREATE TABLE Student(
ID INT NOT NULL AUTO_INCREMENT,
NAME VARCHAR(20) NOT NULL,
AGE INT NOT NULL,
PRIMARY KEY (ID)
);
अब हमें JDBC टेम्प्लेट में एक DataSource की आपूर्ति करने की आवश्यकता है ताकि यह डेटाबेस एक्सेस प्राप्त करने के लिए खुद को कॉन्फ़िगर कर सके। आप निम्न कोड स्निपेट में दिखाए गए कोड के एक टुकड़े के साथ XML फ़ाइल में डेटा स्रोत कॉन्फ़िगर कर सकते हैं -
<bean id = "dataSource"
class = "org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name = "driverClassName" value = "com.mysql.jdbc.Driver"/>
<property name = "url" value = "jdbc:mysql://localhost:3306/TEST"/>
<property name = "username" value = "root"/>
<property name = "password" value = "password"/>
</bean>
डेटा एक्सेस ऑब्जेक्ट (DAO)
DAO का अर्थ डेटा एक्सेस ऑब्जेक्ट है, जो आमतौर पर डेटाबेस इंटरैक्शन के लिए उपयोग किया जाता है। DAO डेटाबेस को डेटा पढ़ने और लिखने का साधन प्रदान करने के लिए मौजूद है और उन्हें इस कार्यक्षमता को एक इंटरफ़ेस के माध्यम से उजागर करना चाहिए जिसके द्वारा शेष एप्लिकेशन उन तक पहुंच पाएंगे।
स्प्रिंग में DAO का समर्थन डेटा एक्सेस तकनीकों जैसे JDBC, हाइबरनेट, JPA या JDO के साथ सुसंगत तरीके से काम करना आसान बनाता है।
SQL कथन निष्पादित करना
देखते हैं कि हम SQL और JDBC टेम्पलेट ऑब्जेक्ट का उपयोग करके डेटाबेस तालिकाओं पर CRUD (क्रिएट, रीड, अपडेट और डिलीट) ऑपरेशन कैसे कर सकते हैं।
Querying for an integer
String SQL = "select count(*) from Student";
int rowCount = jdbcTemplateObject.queryForInt( SQL );
Querying for a long
String SQL = "select count(*) from Student";
long rowCount = jdbcTemplateObject.queryForLong( SQL );
A simple query using a bind variable
String SQL = "select age from Student where id = ?";
int age = jdbcTemplateObject.queryForInt(SQL, new Object[]{10});
Querying for a String
String SQL = "select name from Student where id = ?";
String name = jdbcTemplateObject.queryForObject(SQL, new Object[]{10}, String.class);
Querying and returning an object
String SQL = "select * from Student where id = ?";
Student student = jdbcTemplateObject.queryForObject(
SQL, new Object[]{10}, new StudentMapper());
public class StudentMapper implements RowMapper<Student> {
public Student mapRow(ResultSet rs, int rowNum) throws SQLException {
Student student = new Student();
student.setID(rs.getInt("id"));
student.setName(rs.getString("name"));
student.setAge(rs.getInt("age"));
return student;
}
}
Querying and returning multiple objects
String SQL = "select * from Student";
List<Student> students = jdbcTemplateObject.query(
SQL, new StudentMapper());
public class StudentMapper implements RowMapper<Student> {
public Student mapRow(ResultSet rs, int rowNum) throws SQLException {
Student student = new Student();
student.setID(rs.getInt("id"));
student.setName(rs.getString("name"));
student.setAge(rs.getInt("age"));
return student;
}
}
Inserting a row into the table
String SQL = "insert into Student (name, age) values (?, ?)";
jdbcTemplateObject.update( SQL, new Object[]{"Zara", 11} );
Updating a row into the table
String SQL = "update Student set name = ? where id = ?";
jdbcTemplateObject.update( SQL, new Object[]{"Zara", 10} );
Deleting a row from the table
String SQL = "delete Student where id = ?";
jdbcTemplateObject.update( SQL, new Object[]{20} );
डीडीएल विवरण निष्पादित करना
आप उपयोग कर सकते हैं execute(..)किसी भी SQL स्टेटमेंट या DDL स्टेटमेंट को निष्पादित करने के लिए jdbcTemplate से विधि । तालिका बनाने के लिए क्रिएट स्टेटमेंट का उपयोग करने के लिए एक उदाहरण है -
String SQL = "CREATE TABLE Student( " +
"ID INT NOT NULL AUTO_INCREMENT, " +
"NAME VARCHAR(20) NOT NULL, " +
"AGE INT NOT NULL, " +
"PRIMARY KEY (ID));"
jdbcTemplateObject.execute( SQL );
स्प्रिंग JDBC फ्रेमवर्क उदाहरण
उपरोक्त अवधारणाओं के आधार पर, आइए कुछ महत्वपूर्ण उदाहरणों की जाँच करें जो आपको स्प्रिंग में JDBC ढांचे के उपयोग को समझने में मदद करेंगे -
अनु क्रमांक। | उदाहरण और विवरण |
---|---|
1 | स्प्रिंग JDBC उदाहरण यह उदाहरण बताएगा कि एक सरल JDBC- आधारित स्प्रिंग एप्लिकेशन कैसे लिखना है। |
2 | वसंत में एसक्यूएल संग्रहित प्रक्रिया सीखें कि स्प्रिंग में JDBC का उपयोग करते समय SQL संग्रहीत प्रक्रिया को कैसे कॉल करें। |