کانال بله, جهت پشتیبانی و اطلاع رسانی کانال بله, جهت پشتیبانی و اطلاع رسانی
عضویت

آموزش JDBC Template Example-Java Spring

قالب(Template) Jdbc در اسپرینگ

مثال قالب Jdbc

آموزش قالب Jdbc در اسپرینگ

قالب Jdbc در اسپرینگ یک مکانیزم قدرتمند برای اتصال به پایگاه داده و اجرای SQL query ها است. این قالب با حذف مشکلات JDBC API ، از آن استفاده می¬کند.


مشکلات JDBC API

مشکلات JDBC API عبارتند از:

  • نیاز به نوشتن حجم زیادی از کد مانند ایجاد اتصال(creating connection)، توضیحات(statement)، بستن مجموعه نتایج(closing resultset)، اتصالات و غیره، قبل و بعد از اجرای query داریم.
  • در منطق پایگاه داده نیاز به اجرای کد مدیریت استثنا داریم.
  • نیاز به مدیریت معاملات (transactions) داریم.
  • تکرار تمامی این کدها از یک منطق پایگاه داده به دیگری، کاری زمان بر است.

مزیت¬های قالب Jdbc در اسپرینگ

قالب Jdbc در اسپرینگ تمام مشکلات JDBC API که در بالا مطرح شد را از بین می برد. علاوه بر آن، متدهایی برای شما فراهم می آورد تا بتوانید مستقیما query ها را بنویسید. در نتیجه در کار و زمان صرفه جویی می شود.


رویکردهای Jdbc در اسپرینگ

فریمورک اسپرینگ رویکردهای زیر را برای دسترسی به پایگاه داده JDBC ارائه کرده است:

  • قالب Jdbc
  • قالب NamedParameterJdbc
  • قالب SimpleJdbc
  • SimpleJdbcInsert و SimpleJdbcCall

کلاس قالب Jdbc

این کلاس مرکزی در کلاس های پشتیبانی JDBC اسپرینگ است. ایجاد و انتشار منابع از جمله ایجاد و بستن شی اتصال از وظایف آن است. در نتیجه اگر بستن اتصال را فراموش کنید مشکلی پیش نخواهد آمد. این کلاس استثناها را مدیریت می کند و با استفاده از کلاس های استثنا، تعریف شده در پکیج org.springframework.dao پیام هایی حاوی اطلاعات درباره استثنا ارائه می کند. با کمک کلاس قالب Jdbc می توانیم همه عملیات پایگاه داده از جمله درج، به روز رسانی، حذف و بازیابی داده از پایگاه داده را اجرا کنیم. متدهای کلاس قالب Jdbc در اسپرینگ را بررسی می¬کنیم.

  • متد public int update(String query): این متد برای درج، به روز رسانی و حذف رکوردها(records) مورد استفاده قرار می گیرد.
  • متد public int update(String query,Object... args): این متد برای درج، به روز رسانی و حذف رکوردها با استفاده از PreparedStatement با استفاده از آرگومان های داده شده، مورد استفاده قرار می گیرد.
  • متد public void execute(String query): این متد برای اجرای DDL query مورد استفاده قرار می گیرد.
  • متد public T execute(String sql, PreparedStatementCallback action) : این متد با بازفراخوانی PreparedStatement ، query را اجرا می کند.
  • متد public T query(String sql, ResultSetExtractor rse) : این متد با استفاده از ResultSetExtractor، رکوردها را واکشی(fetch) می کند.
  • متد public List query(String sql, RowMapper rse): این متد با استفاده از RowMapper رکوردها واکشی می کند.

مثال قالب Jdbc در اسپرینگ

فرض میکنیم جدول زیر را درون پایگاه داده Oracle10g ایجاد کرده اید.

create table employee(  
id number(10),  
name varchar2(100),  
salary number(10)  
);  

Employee.java

این کلاس شامل سه خصیصه به همراه سازنده ها و setter و getter ها است.

package com.javatpoint;  
  
public class Employee {  
private int id;  
private String name;  
private float salary;  
//no-arg and parameterized constructors  
//getters and setters  
}  


EmployeeDao.java

فایل EmployeeDao.java شامل یک خصیصه قالب Jdbc و سه متد saveEmployee() ، updateEmployee و deleteEmployee() است.

package com.javatpoint;  
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 برای نگهداری اطلاعات درباره پایگاه داده، از جمله نام کلاس driver، اتصال URL، نام کاربری و رمز عبور استفاده می شود. یک خصیصه به نام datasource در کلاس قالبJdbc از نوع DriverManagerDataSource وجود دارد. بنابراین برای خصیصه datasource باید مرجع شی DriverManagerDataSource در کلاس قالبJdbc را آماده کنیم. در اینجا از شی قالب Jdbc در کلاس EmployeeDao استفاده می کنیم. بنابراین از متد setter برای پاس دادن آن استفاده می کنیم. شما همچنین می توانید از سازنده استفاده کنید.

< ?xml version="1.0" encoding="UTF-8" ?>
< beans 3. xmlns="http://www.springframework.org/schema/beans"
         4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         5. xmlns:p="http://www.springframework.org/schema/p"
         6. 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.javatpoint.EmployeeDao">  
< property name="jdbcTemplate" ref="jdbcTemplate">< /property>  
< /bean>    
< /beans>  

Test.java

این کلاس bean را از فایل applicationContext.xml می گیرد و متد saveEmployee() را فراخوانی می کند. همچنین می توانید دو متد updateEmployee() و updateEmployee() را از حالت یادداشت(comment) خارج کنید و از آنها استفاده کنید.

package com.javatpoint;  
  
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);*/  
      
}  
  
}  
1398/12/20 1997 518
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

نظرات خود را ثبت کنید...