<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

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

    常用鏈接

    留言簿(1)

    隨筆分類

    隨筆檔案

    關注blogs

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲综合色7777情网站777| 两个人www免费高清视频| 亚洲国产成人久久精品99| 国产日韩AV免费无码一区二区三区| 亚洲AV无码一区二区二三区入口 | 84pao强力永久免费高清| 亚洲综合色婷婷在线观看| 亚洲伊人久久综合影院| aⅴ在线免费观看| 在线播放免费人成视频网站| 亚洲国产日韩一区高清在线| 国产一级特黄高清免费大片| 久久久久久国产精品免费免费男同 | 69成人免费视频| fc2成年免费共享视频网站| 亚洲理论片在线中文字幕| 亚洲精品国产自在久久| 99在线精品免费视频九九视| 岛国岛国免费V片在线观看| 美女视频黄免费亚洲| 国产精品亚洲精品日韩已满| 暖暖日本免费在线视频| 1000部拍拍拍18勿入免费视频软件| 黄色网页免费观看| 亚洲精品亚洲人成在线播放| 亚洲日韩一页精品发布| 国产成人在线观看免费网站 | 9420免费高清在线视频| 日韩毛片在线免费观看| 亚洲 欧洲 视频 伦小说| 亚洲高清在线视频| 亚洲综合久久夜AV | 国产成人免费全部网站| 青娱乐免费在线视频| 日本免费中文视频| 亚洲阿v天堂在线2017免费| 亚洲精品无码不卡在线播放| 亚洲第一香蕉视频| 亚洲今日精彩视频| 亚洲精品白浆高清久久久久久| 免费中文字幕一级毛片|