hibernate調用mysql存儲過程


  在mysql中創建兩個存儲過程,如下:

1、根據id查找某條數據:

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


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

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

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

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

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

 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 args
17      * @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。

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

 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行。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM