Hibernate 存储过程的调用(转)

来源:互联网 发布:江恩理论有用吗 知乎 编辑:程序博客网 时间:2024/06/11 02:02
  • http://developer.51cto.com  2009-06-17 10:33  陈振国  陈振国的博客 我要评论(1)
    本文讲述的是Hibernate 存储过程的调用,首先给出了简单的Hibernate存储过程并附其Java代码,然后给出了调用方法的Java代码,及其它相应的Java代码。

    下边是简单的Hibernate存储过程

    Java代码:

    1. create   PROCEDURE  proc()    
    2. begin    
    3.     select   *   from  proctab;    
    4. end ;   create   PROCEDURE  proc() 
    5. begin 
    6.     select   *   from  proctab; 
    7. end ; 

    Hibernate存储过程调用的一种方法是通过Hibernate传统的xml映射方式去调用。

    Java代码:

    1. <class name="com.test.User" table="proctab">    
    2.             
    3.             class="native"/>    
    4.             
    5.             
    6.             
    7. class>    
    8.        
    9.      <return alias="user" class="com.test.User">    
    10.      <return-property name="id" column="id" />    
    11.      <return-property name="name" column="name" />    
    12.      <return-property name="age" column="age" />    
    13.      return>    
    14.      {call proc()}    
    15.       
    16. <class name="com.test.User" table="proctab"> 
    17.          
    18.             class="native"/> 
    19.          
    20.          
    21.          
    22. class> 
    23.     
    24.      <return alias="user" class="com.test.User"> 
    25.      <return-property name="id" column="id" /> 
    26.      <return-property name="name" column="name" /> 
    27.      <return-property name="age" column="age" /> 
    28.      return> 
    29.      {call proc()} 
    30.   

    调用方法 Java代码:

    1. Session ss= HibernateSessionFactory.getSession()    
    2. List li=ss.getNamedQuery("getUser").list();    
    3. ss.close();   
    4.  
    5.         Session ss= HibernateSessionFactory.getSession() 
    6.         List li=ss.getNamedQuery("getUser").list(); 
    7.         ss.close();

    及其类似jdbc的方法 Java代码:

    1. Session session =HibernateSessionFactory.getSession();     
    2. Connection conn = session.connection();     
    3. ResultSet rs =null;    
    4. CallableStatement call = conn.prepareCall("{Call proc()}");    
    5. rs = call.executeQuery();    
    6. rs.close();    
    7. session.close();   
    8.  
    9. Session session =HibernateSessionFactory.getSession();  
    10. Connection conn = session.connection();  
    11. ResultSet rs =null
    12. CallableStatement call = conn.prepareCall("{Call proc()}"); 
    13. rs = call.executeQuery(); 
    14. rs.close(); 
    15. session.close();

    这种方法基本上就是jdbc,不过很简单,总是感觉怪怪的~还有就是通过强大的createSQLQuery来实现,o(∩_∩)o...哈哈  个人比较喜欢这种方法

    Java代码:

    1. Session session =HibernateSessionFactory.getSession();     
    2. SQLQuery query = session.createSQLQuery("{Call proc()}");    
    3. List list =query.list();    
    4. session.close();   
    5.  
    6. Session session =HibernateSessionFactory.getSession();  
    7. SQLQuery query = session.createSQLQuery("{Call proc()}"); 
    8. List list =query.list(); 
    9. session.close();

    如果没有返回值 直接用execute的方法就可以了,(*^__^*)  忘了一个重要的问题就是Hibernate存储过程的传参问题

    Java代码:

    1. CallableStatement call = conn.prepareCall("{Call proc(?)}");    
    2. call.setString(1, 参数);    
    3. rs = call.executeQuery();   
    4.  
    5. CallableStatement call = conn.prepareCall("{Call proc(?)}"); 
    6. call.setString(1, 参数); 
    7. rs = call.executeQuery();

    Java代码:

    1. SQLQuery query = session.createSQLQuery("{Call proc(?)}");    
    2. query.setString(0, 参数);    
    3. List list =query.list();  

    以上便是对Hibernate存储过程调用的认识,粗陋之处还请指正。