<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通過實現(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
    <2009年11月>
    25262728293031
    1234567
    891011121314
    15161718192021
    22232425262728
    293012345

    常用鏈接

    留言簿(1)

    隨筆分類

    隨筆檔案

    關注blogs

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲色欲久久久久综合网| 永久免费bbbbbb视频| 亚洲国产精品无码AAA片| 一区二区3区免费视频| 亚洲国产精品成人| 一级毛片a免费播放王色电影| 亚洲第一视频在线观看免费| 日亚毛片免费乱码不卡一区| 精品国产亚洲男女在线线电影 | 深夜A级毛片视频免费| 四虎永久在线精品免费影视| 精品一区二区三区无码免费直播| 免费一级国产生活片| v片免费在线观看| 亚洲成色在线综合网站| 无码精品一区二区三区免费视频 | 99久久99久久精品免费观看| 亚洲美女免费视频| 成年18网站免费视频网站| 亚洲精品中文字幕乱码| 亚洲人成网站免费播放| 亚洲成a人片在线不卡一二三区 | 国产成年无码久久久免费| 久久久久亚洲AV片无码下载蜜桃| 1000部免费啪啪十八未年禁止观看| 亚洲国产精品综合久久20| 国产一级一片免费播放i| 一级毛片一级毛片免费毛片| 亚洲不卡中文字幕无码| 国产精品免费网站| 免费人成动漫在线播放r18| 亚洲av午夜成人片精品网站 | 久久精品国产亚洲av四虎| 无码国产精品一区二区免费虚拟VR| 亚洲av无码专区国产不乱码| 在线观看国产区亚洲一区成人 | 亚洲另类春色校园小说| 国产亚洲精品激情都市| 在线美女免费观看网站h| 国产精品亚洲精品久久精品| 亚洲乱码日产一区三区|