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

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 永春县| 大方县| 怀柔区| 井冈山市| 鹤岗市| 邵东县| 广宁县| 崇左市| 宜春市| 利津县| 西藏| 清苑县| 乐都县| 潜江市| 九台市| 全州县| 陈巴尔虎旗| 南安市| 镇原县| 扎兰屯市| 韩城市| 中阳县| 霞浦县| 龙里县| 收藏| 辽源市| 全椒县| 周口市| 遵义市| 富顺县| 石门县| 高密市| 临颍县| 金寨县| 法库县| 察雅县| 高唐县| 忻州市| 城固县| 安化县| 凌源市|