zoukankan      html  css  js  c++  java
  • 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+"	"+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行。

  • 相关阅读:
    Android 使用系统签名打包apk
    创业公司如何巧用工具提高团队生产力——豌豆荚创始人王俊煜讲述团队背后的“利器”
    Spring整合BoneCP+Hibernate配置数据连接池
    EhCache集群方案JGroups
    IOS 目录结构
    关于hibernate的缓存使用
    用webbrowser控件做一个资源管理器,如何得到IE控件中选中(鼠标多选)的文件名称列表?
    轮回!
    转载:谨以此文献给才毕业25年的朋友
    新的开始
  • 原文地址:https://www.cnblogs.com/liuling/p/2013-7-29-01.html
Copyright © 2011-2022 走看看