hibernate调用mysql存储过程

    添加时间:2013-7-29 点击量:

      在mysql中创建两个存储过程,如下:


    1、按照id查找某条数据:



    1 CREATE PROCEDURE `findEmpById`(IN id INTEGER11))
    
    2 begin
    3 emp where empId=id;
    4 end;



    2、按照id查找某个字段,并返回



    1 CREATE PROCEDURE `getNameById`(in id integer11),out eName varchar50))
    
    2 begin
    3 empName into eName 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行。


    读书,不要想着实用,更不要有功利心。读书只为了自身的修养。邂逅一本好书如同邂逅一位知己,邂逅一个完美之人。有时心生敬意,有时怦然心动。仿佛你心底埋藏多年的话,作者替你说了出来,你们在时光深处倾心相遇的一瞬间,情投意合,心旷神怡。
    分享到: