مشخصات مقاله
-
500
-
0.0
-
1699
-
0
-
0
آموزش NamedParameter-Java Spring
NamedParameter
مثال قالب NamedParameterJdbc در اسپرینگ
اسپرینگ روش دیگری برای درج داده، به واسطه پارامترهای نامگذاری شده (named parameter)، ارائه کرده است. در این روش، به جای علامت سوال (؟) از نام ها استفاده می کنیم. بنابراین بهتر است داده ها را ستونی به خاطر بسپاریم.
مثال ساده از query پارامترهای نامگذاری شده(named parameter query)
insert into employee values (:id,:name,:salary)
متد کلاس قالب NamedParameterJdbc
در این مثال تنها متد execute از کلاس قالب NamedParameterJdbc را فراخوانی می کنیم. نحو متد به صورت زیر است:
pubic T execute(String sql,Map map,PreparedStatementCallback psc)
مثال کلاس قالب NamedParameterJdbc
فرض می کنیم جدول زیر را درون پایگاه داده 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
این شامل یک خصیصه قالب Jdbc و یک متد save است .
package com.javatpoint;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.PreparedStatementCallback;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import java.util.*;
public class EmpDao {
NamedParameterJdbcTemplate template;
public EmpDao(NamedParameterJdbcTemplate template) {
this.template = template;
}
public void save (Emp e){
String query="insert into employee values (:id,:name,:salary)";
Map map=new HashMap();
map.put("id",e.getId());
map.put("name",e.getName());
map.put("salary",e.getSalary());
template.execute(query,map,new PreparedStatementCallback() {
@Override
public Object doInPreparedStatement(PreparedStatement ps)
throws SQLException, DataAccessException {
return ps.executeUpdate();
}
});
}
}
applicationContext.xml
از DriverManagerDataSource برای نگهداری اطلاعات درباره پایگاه داده، از جمله نام کلاس driver، اتصال URL، نام کاربری و رمز عبور استفاده می شود. یک خصیصه به نام datasource در کلاس قالب NamedParameterJdbc از نوع DriverManagerDataSource وجود دارد. بنابراین برای خصیصه datasource باید مرجع شی DriverManagerDataSource در کلاس قالب NamedParameterJdbcرا آماده کنیم. در اینجا از شی قالب NamedParameterJdbc در کلاس 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="jtemplate"
17. class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">
< constructor-arg ref="ds">< /constructor-arg>
< /bean>
< bean id="edao" class="com.javatpoint.EmpDao">
< constructor-arg>
< ref bean="jtemplate" />
< /constructor-arg>
< /bean>
< /beans>
SimpleTest.java
این کلاس bean را از فایل applicationContext.xml می گیرد و متدsave را فراخوانی می کند.
package com.javatpoint;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
public class SimpleTest {
public static void main(String[] args) {
Resource r=new ClassPathResource("applicationContext.xml");
BeanFactory factory=new XmlBeanFactory(r);
EmpDao dao=(EmpDao)factory.getBean("edao");
dao.save(new Emp(23,"sonoo",50000));
}
}