English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Spring JdbcTemplate هي آلية قوية للتواصل مع قاعدة البيانات وتنفيذ استعلامات SQL. تستخدم API JDBC داخليًا، لكنها تتجنب العديد من مشاكل API JDBC.
مشاكل API JDBC كالتالي:
نحتاج إلى كتابة الكثير من الكود قبل تنفيذ الاستعلام وبعده، مثل إنشاء الاتصال، جملة، إغلاق مجموعة النتائج، إغلاق الاتصال، إلخ. نحتاج إلى تنفيذ كود معالجة الاستثناءات على مستوى منطق قاعدة البيانات. نحتاج إلى التعامل مع المعاملات. تكرار جميع هذه الكود من منطق قاعدة بيانات إلى منطق آخر يتطلب الكثير من الوقت.
يُزيل Spring JdbcTemplate جميع المشاكل في API JDBC. يوفر طريقة كتابة الاستعلام مباشرة، مما يوفر الكثير من العمل والوقت.
يقدم Spring framework طرقًا التالية لتحقيق الوصول إلى قواعد البيانات JDBC:
JdbcTemplate NamedParameterJdbcTemplate SimpleJdbcTemplate SimpleJdbcInsert و SimpleJdbcCall
إنه فئة مركزية لدعم JDBC في Spring. يُتحمل إنشاء وتحرير الموارد مثل إنشاء وإغلاق كائنات الاتصال. لذلك، إذا نسيت إغلاق الاتصال، لن يؤدي إلى أي مشكلة.
يُعالج الاستثناءات ويقدم رسائل استثناء من خلال org.springframework.dao مساعدة الفئات الاستثنائية المحددة في الحزمة.
يمكننا استخدام فئة JdbcTemplate لتنفيذ جميع العمليات البيانية، مثل الإضافة، التحديث، الحذف من قاعدة البيانات والاستعلام عن البيانات.
لنلقي نظرة على طرق فئة Spring JdbcTemplate.
الطريقة | شرح |
public int update(String query) | يُستخدم للاضافة، التحديث والإزالة السجلات. |
public int update(String query,Object ... args) | لإدراج،تحديث وإزالة السجلات باستخدام PreparedStatement مع المعطيات المقدمة. |
public void execute(String query) | لتنفيذ استعلامات DDL. |
public T execute(String sql, PreparedStatementCallback action) | من خلال استخدام callback لPreparedStatement لتنفيذ الاستعلام. |
public T query(String sql, ResultSetExtractor rse) | للحصول على السجلات باستخدام ResultSetExtractor. |
public List query(String sql, RowMapper rse) | للحصول على السجلات باستخدام RowMapper. |
نفترض أنك قد أنشأت الجدول التالي في قاعدة بيانات Oracle10g.
create table employee( id number(10), name varchar2(100), salary number(10) );
Employee.java
تتضمن هذه الفئة ثلاث خصائص تحتوي على بناء الكائن،مستدعيات الإعداد والاسترجاع.
package com.w3codebox; public class Employee { private int id; private String name; private float salary; //لا توجد كتل بناء بدون أو بمعايير //getters and setters {}
EmployeeDao.java
يحتوي على خاصية jdbcTemplate وثلاث طرق saveEmployee()،updateEmployee وdeleteEmployee().
package com.w3codebox; import org.springframework.jdbc.core.JdbcTemplate; public class EmployeeDao { private JdbcTemplate jdbcTemplate; public void setJdbcTemplate(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; {} public int saveEmployee(Employee e){} String query="insert into employee values('"+e.getId()+"','"+e.getName()+"','"+e.getSalary()+"')"; return jdbcTemplate.update(query); {} public int updateEmployee(Employee e){ String query="update employee set name='"+e.getName()+"',salary='"+e.getSalary()+"' where id='"+e.getId()+"' "; return jdbcTemplate.update(query); {} public int deleteEmployee(Employee e){ String query="delete from employee where id='"+e.getId()+"' "; return jdbcTemplate.update(query); {} {}
applicationContext.xml
DriverManagerDataSource لإدراج معلومات قاعدة البيانات مثل اسم فئة المحرك، عنوان الاتصال، اسم المستخدم وكلمة المرور.
في فئة JdbcTemplate من نوع DriverManagerDataSource هناك اسم datasource الخصائص. لذلك، نحتاج إلى تقديم مرجع لـ DriverManagerDataSource كعنصر للخصائص في فئة JdbcTemplate.
في هذا المكان، نستخدم في فئة EmployeeDao كائن JdbcTemplate، لذا ننقلها عبر طريقة setter، ولكن يمكنك أيضًا استخدام بناء المصفوفة.
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans" http://www.springframework.org/schema/beans/spring-beans-3.0.xsd <bean id="ds" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" /> <property name="url" value="jdbc:oracle:thin:@localhost:1521:xe" /> <property name="username" value="system" /> <property name="password" value="oracle" /> </bean> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="ds"></property> </bean> <bean id="edao" class="com.w3codebox.EmployeeDao"> <property name="jdbcTemplate" ref="jdbcTemplate"></property> </bean> </beans>
Test.java
هذا الكائن يحصل على Bean من ملف applicationContext.xml ويقوم بتشغيل طريقة saveEmployee(). يمكنك أيضًا تعطيل التعليقات للتحقق من تشغيل طرق updateEmployee() وdeleteEmployee().
package com.w3codebox; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Test { public static void main(String[] args) { ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); EmployeeDao dao = (EmployeeDao) ctx.getBean("edao"); int status = dao.saveEmployee(new Employee(102, "Amit", 35000)); System.out.println(status); /*int status = dao.updateEmployee(new Employee(102, "Sonoo", 15000)); System.out.println(status); */ /*Employee e = new Employee(); e.setId(102); int status = dao.deleteEmployee(e); System.out.println(status);*/ {} {}