调用存储过程:
Spring通过实现CallableStatementCallback来支持存储过程。假定有个存储过程的名字是ARCHIVE_STUDENTS,执行代码如下:
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来实现
*/

public void archiveStudentData()
{

CallableStatementCallback cb = new CallableStatementCallback()
{

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

把操作创建成对象:
插入:
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之间又加了一个绝缘层。
* 首先,这些数据库操作对象是线程安全的,意味着对于每个数据库操作,你只需创建一个实例。
* 其次,任何数据库操作对象必须在运行前先编译一下,这样就让对象知道什么时候可以预备statement,以便在稍后能执行它们。
* 使用:
* private InsertPerson insertPerson;
* public int insertPerson(Person person){
* return insertPerson.insert(person);
* }
*
*/

public class InsertPerson extends SqlUpdate
{

public InsertPerson(DataSource ds)
{
//首先要给sqlUpdate提供一个DataSource,用来创建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
王永庆 阅读(273)
评论(0) 编辑 收藏 所属分类:
SPRING