hibernate調用mysql存儲過程

 在mysql中建立兩個存儲過程,以下:java

一、根據id查找某條數據:mysql

1 CREATE PROCEDURE `findEmpById`(IN id INTEGER(11))2 begin3      select * from emp where empId=id;4 end;


二、根據id查找某個字段,並返回sql

1 CREATE PROCEDURE `getNameById`(in id integer(11),out eName varchar(50))2 begin3      select empName into eName from emp where empId=id;4 end;

  在存儲過程的參數列表裏面,in修飾的參數表明輸入參數,out修飾的表明輸出參數。session

使用hibernate調用上面兩個存儲過程:ui

  (1)調用第一個存儲過程spa

複製代碼

 1 package com.test; 2  3 import java.sql.CallableStatement; 4 import java.sql.Connection; 5 import java.sql.ResultSet; 6 import java.sql.SQLException; 7  8 import org.hibernate.Session; 9 import org.hibernate.SessionFactory;10 import org.hibernate.cfg.Configuration;11 12 13 public class 調用存儲過程 {14 15     /**16      * @param args17      * @throws SQLException 
18      */19     public static void main(String[] args) throws SQLException {20         Configuration cfg = new Configuration().configure();21         SessionFactory factory = cfg.buildSessionFactory();22         Session session = factory.openSession();23         Connection con = session.connection();24         String sql = "{call findEmpById(?)}";25         CallableStatement cs = con.prepareCall(sql);26         cs.setObject(1, 2);27         ResultSet rs = cs.executeQuery();28         while(rs.next()){29             int id = rs.getInt("empId");30             String name = rs.getString("empName");31             System.out.println(id+"\t"+name);32         }33     }34 35 }

複製代碼

    調用存儲過程的sql語句爲:call 存儲過程名(參數...),不過在java中調用存儲過程通常都加{}。調用存儲過程使用的是CallableStatement。hibernate

  (2)調用第二個存儲過程code

複製代碼

 1 package com.test; 2  3 import java.sql.CallableStatement; 4 import java.sql.Connection; 5 import java.sql.SQLException; 6  7 import org.hibernate.Session; 8 import org.hibernate.SessionFactory; 9 import org.hibernate.cfg.Configuration;10 11 public class 調用存儲過程1 {12 13     14     public static void main(String[] args) throws SQLException {15         Configuration config = new Configuration().configure();16         SessionFactory sessionFactory = config.buildSessionFactory();17         Session session = sessionFactory.openSession();18         Connection conn = session.connection();19         String sql = "{call getNameById(?,?)}";20         CallableStatement cs = conn.prepareCall(sql);  
21         cs.setObject(1, 3); //設置輸出參數22         cs.registerOutParameter(2, java.sql.Types.VARCHAR); //設置第二個參數爲輸出參數23         cs.execute(); //調用存儲過程24         String name = cs.getString(2);//獲取輸出參數25         System.out.println(name);26     }27 28 }

複製代碼

  若是有輸出參數,須要特別指出,如上面的代碼22行get

相關文章
相關標籤/搜索