免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
oracle存儲過程備忘以及在Hibernate中使用存儲過程

oracle存儲過程備忘以及在Hibernate中使用存儲過程

   Oracle存儲過程主要用來處理復雜業(yè)務邏輯,把應用系統(tǒng)中的這些邏輯(代碼,如java形式)放到數(shù)據(jù)庫(pl/sql形式)中執(zhí)行??梢酝ㄟ^存儲過程來執(zhí)行批量更新。存儲過程直接在數(shù)據(jù)庫中運行,執(zhí)行效率更高。
    在Oracle數(shù)據(jù)庫中可以定義一個名為batchUpdateStudent()的存儲過程,代碼如下:
Java代碼
 
  1. create or replace procedure batchUpdateStudent(p_age in number) as   
  2. begin   
  3. update STUDENT set AGE=AGE+1 where AGE>p_age;   
  4. end;  

   以上存儲過程有一個參數(shù)p_age,代表學生的年齡,應用程序可按照以下方式調用存儲過程:
Java代碼
 
  1. //hibernater 不支持直接更新或刪除的存儲過程,可以繞過Hibernate,   
  2. //而在Hibernate中直接使用JDBC   
  3.   
  4. tx = session.beginTransaction();   
  5. Connection con=session.connection();   
  6.   
  7. String procedure = "{call batchUpdateStudent(?) }";   
  8. CallableStatement cstmt = con.prepareCall(procedure);   
  9. cstmt.setInt(1,0); //把年齡參數(shù)設為0   
  10. cstmt.executeUpdate();   
  11. tx.commit();  


  使用存儲過程來查詢  
   Hibernate3引入了對存儲過程查詢的支持。存儲過程必須返回一個結果集,作為Hibernate能夠使用的第一個外部參數(shù)。下面是一個Oracle9i和更高版本的存儲過程例子。
   
Java代碼
 
  1. Create or REPLACE FUNCTION selectAllEmployments        
  2. RETURN    SYS_REFCURSOR        
  3.    AS        
  4.       st_cursor    SYS_REFCURSOR;        
  5.    BEGIN        
  6.      OPEN st_cursor FOR        
  7.      Select EMPLOYEE,EMPLOYER,        
  8.      STARTDATE, ENDDATE,        
  9.      REGIONCODE, EID, VALUE, CURRENCY        
  10.      FROM EMPLOYMENT;        
  11.      RETURN st_cursor;        
  12. END;     

   在Hibernate里要要使用這個查詢,你需要通過命名查詢來映射它.
  
Java代碼
 
  1. <sql-query    name="selectAllEmployees_SP"    callable="true">      
  2.            <return    alias="emp"    class="Employment">      
  3.                    <return-property    name="employee"    column="EMPLOYEE"/>      
  4.                    <return-property    name="employer"    column="EMPLOYER"/>                              
  5.                    <return-property    name="startDate"    column="STARTDATE"/>      
  6.                    <return-property    name="endDate"    column="ENDDATE"/>                              
  7.                    <return-property    name="regionCode"    column="REGIONCODE"/>                              
  8.                    <return-property    name="id"    column="EID"/>                                                      
  9.                    <return-property    name="salary">        
  10.                            <return-column    name="VALUE"/>      
  11.                            <return-column    name="CURRENCY"/>                              
  12.                    </return-property>      
  13.            </return>      
  14.            {    ?    =    call    selectAllEmployments()    }      
  15.    </sql-query>     


   注意存儲過程當前僅僅返回標量和實體.現(xiàn)在不支持<return-join>和<load-collection> 
Java代碼
 
  1. <hibernate-mapping package="com.unmi.vo"> <class name="Test" table="TEST"/>          
  2.   
  3. <sql-query callable="true" >    
  4.   
  5. <return alias="aa" > <return-property name="oborqt" column="OBORQT"/>   
  6.   
  7. <return-property column="MOORQT"/> <return-property name="roschn" column="ROSCHN"/>   
  8.   
  9. <return-property column="PLANDATE"/>    
  10.   
  11. <return> { ? = call selectAllUsers() } </sql-query>    
  12.   
  13. </hibernate-mapping>  


   { ? = call selectAllUsers() } 也可以寫成{ call selectAllUsers() }, 如果有參數(shù)就寫成 { ? = call selectAllUsers(?,?,?) } 代碼中對query設置相應位置上的值就OK Java調用關鍵代碼如下
Java代碼
 
  1. Session session = HibernateUtil.currentSession();   
  2.   
  3. Query query = session.getNamedQuery("selectAllUsers");    
  4.   
  5. List list = query.list();   
  6.   
  7. System.out.println(list);  

   要求你的存儲過程必須能返回記錄集,否則要出錯 如果你的存儲過程是完成非查詢任務就應該在配置文件用以下三個標簽
Java代碼
 
  1. <sql-insert callable="true">{call createPerson (?, ?)}</sql-insert>   
  2.   
  3. <sql-delete callable="true">{? = call deletePerson (?)}</sql-delete>    
  4.   
  5. <sql-update callable="true">{? = call updatePerson (?, ?)}</sql-update>  




  簡單的Hibernate調用oracle存儲過程方式:
Java代碼
 
  1. this.pnumberManager.getHibernateTemplate().execute(   
  2.                 new HibernateCallback() ...{   
  3.                     public Object doInHibernate(Session session)   
  4.                             throws HibernateException, SQLException ...{   
  5.                         CallableStatement cs = session   
  6.                                 .connection()   
  7.                                 .prepareCall("{call modifyapppnumber_remain(?)}");   
  8.                         cs.setString(1, foundationid);   
  9.                         cs.execute();   
  10.                         return null;   
  11.                     }   
  12.                 });  
本站僅提供存儲服務,所有內容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
使用SQLQuery
Hibernate3.x調用存儲過程(轉)
Hibernate sql查詢
精通Hibernate
Hibernate—第一季who are you
hibernate之緩存使用二
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服