調用存儲過程:
Spring通過實現(xiàn)CallableStatementCallback來支持存儲過程。假定有個存儲過程的名字是ARCHIVE_STUDENTS,執(zhí)行代碼如下:
package com.testproject.spring.datasource;

import java.sql.CallableStatement;
import java.sql.SQLException;

import org.springframework.jdbc.core.CallableStatementCallback;
import org.springframework.jdbc.core.JdbcTemplate;

/**//*
* 為了讓JdbcTemplate工作,它所需要的,只是一個DataSource實例。
*/

public class StudentDaoImpl implements StudentDao
{
private JdbcTemplate jdbcTemplate;

public void setJdbcTemplate(JdbcTemplate jdbcTemplate)
{
this.jdbcTemplate = jdbcTemplate;
}

/** *//**
* 調用存儲過程,通過CallableStatementCallback來實現(xiàn)
*/

public void archiveStudentData()
{

CallableStatementCallback cb = new CallableStatementCallback()
{

public Object doInCallableStatement(CallableStatement cs)throws SQLException
{
cs.execute();
return null;
}
};
jdbcTemplate.execute("{ARCHIVE_STUDENTS}",cb);
}
}

把操作創(chuàng)建成對象:
插入:
package com.testproject.spring.datasource;

import java.sql.Types;

import javax.sql.DataSource;

import org.springframework.jdbc.core.SqlParameter;
import org.springframework.jdbc.object.SqlUpdate;

/** *//**
* Spring提供了一種真正把數據庫操作建模成對象的方法,這樣就在的代碼和直接JDBC之間又加了一個絕緣層。
* 首先,這些數據庫操作對象是線程安全的,意味著對于每個數據庫操作,你只需創(chuàng)建一個實例。
* 其次,任何數據庫操作對象必須在運行前先編譯一下,這樣就讓對象知道什么時候可以預備statement,以便在稍后能執(zhí)行它們。
* 使用:
* private InsertPerson insertPerson;
* public int insertPerson(Person person){
* return insertPerson.insert(person);
* }
*
*/

public class InsertPerson extends SqlUpdate
{

public InsertPerson(DataSource ds)
{
//首先要給sqlUpdate提供一個DataSource,用來創(chuàng)建JdbcTemplate
setDataSource(ds);
setSql("insert into person(id,firstName,lastName) values(?,?,?)");
//其次,我們需要為statement中的每個參數調用這個方法,順序也是很重要的
declareParameter(new SqlParameter(Types.NUMERIC));
declareParameter(new SqlParameter(Types.VARCHAR));
declareParameter(new SqlParameter(Types.VARCHAR));
//最后編譯它,每個數據庫操作對象必須在它被使用之前編譯好。
compile();
}

public int insert(Person person)
{

Object[] params = new Object[]
{
person.getId(),
person.getFirstName(),
person.getLastName()
};
return update(params);
}
}

查詢:
package com.testproject.spring.datasource;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;

import javax.sql.DataSource;

import org.springframework.jdbc.core.SqlParameter;
import org.springframework.jdbc.object.MappingSqlQuery;


/** *//**
* 使用:
* private PersonByIdQuery personByIdQuery;
* public person getPerson(Integer id){
* Object[] params = new Object[]{id};
* return (Person)personByIdQuery.execute(params).get(0);
* }
*
*/

public class PersonByIdQuery extends MappingSqlQuery
{

public PersonByIdQuery(DataSource ds)
{
super(ds,"select id,first_name,last_name from person where id=?");
declareParameter(new SqlParameter("id",Types.INTEGER));
compile();
}

protected Object mapRow(ResultSet rs, int rowNumber) throws SQLException
{
Person person = new Person();
person.setId((Integer)rs.getObject("id"));
person.setFirstName(rs.getString("first_name"));
person.setLastName(rs.getString("last_name"));
return person;
}

}

posted on 2009-11-14 15:21
王永慶 閱讀(278)
評論(0) 編輯 收藏 所屬分類:
SPRING