posts - 66,  comments - 11,  trackbacks - 0

          調用存儲過程:
          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 王永慶 閱讀(280) 評論(0)  編輯  收藏 所屬分類: SPRING
          <2009年11月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          關注blogs

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 巴中市| 木兰县| 麻城市| 仙游县| 莱阳市| 贵定县| 无锡市| 茶陵县| 滦平县| 武义县| 修武县| 泰和县| 阜阳市| 张家界市| 绥阳县| 青州市| 文水县| 林周县| 浦东新区| 平昌县| 徐州市| 永川市| 巴里| 志丹县| 乾安县| 金川县| 精河县| 白山市| 云和县| 中江县| 汨罗市| 庆阳市| 石阡县| 都匀市| 色达县| 中山市| 东乡县| 莫力| 贵定县| 古田县| 左权县|