hibernate调用存储过程

来源:互联网 发布:专业做网站的公司知乎 编辑:程序博客网 时间:2024/06/18 15:44

第一种,传入一个参数,做更新或者删除操作,没有返回值(hibernate形式的)

SQLQuery sqlQuery = this.getSession().createSQLQuery("{call updUser(?)}");
sqlQuery.setInteger(0, 4);
sqlQuery.executeUpdate();


第二种,hibernate框架下调用jdbc模式

1、返回结果为结果集的,但没有输出参数

Connection conn = (Connection) SessionFactoryUtils.getDataSource(sessionfactory).getConnection();

//获得connection对象         
CallableStatement sp;

sp = conn.prepareCall("{call baseweb.land_procedure1(?)}");  //调用存储过程
sp.setString(1, "201440509");  //向存储过程传递有参的参数(参数为字符串类型),1代表第一个参数

// sp.setInt(2,12);   //传递整形的参数

sp.execute(); // 执行存储过程 
ResultSet rs=sp.getResultSet();   //获得结果集

List<landprocedure> listTemp= new ArrayList<landprocedure>();  //定义一个相应类型的list集合去接受

while (rs.next()) {
             landprocedure lp = new landprocedure();   //实例化一个相应结果集类型的JavaBean
             lp.setLid(rs.getInt("la_id"));
             lp.setBname(rs.getString("bname"));
             lp.setStartTime(rs.getString("startTime"));
             lp.setEndTime(rs.getString("endTime"));
             lp.setTimes(rs.getInt("times"));
             lp.setApplicantId(rs.getString("applicantId"));
             lp.setLa_id(rs.getInt("la_id"));
             lp.setStatus(rs.getInt("status"));
             System.out.println(rs.getString("bname"));    
             listTemp.add(lp);

         }

         if(rs!=null)  //关闭连接
         {
             rs.close();
         }
         if(sp!=null)
         {
             sp.close();
         }
         if(conn!=null)
         {
             conn.close();
         }

2、存储过程有输出参数的

同上

            sp = conn.prepareCall("{CALL baseweb.`user_login1`(?,?,?)}");  //调用存储过程

            sp.setString(1, "20142202");  //向存储过程传递有参的参数(参数为字符串类型),1代表第一个参数
            sp.setString(2, "123456");
            sp.registerOutParameter(3,java.sql.Types.INTEGER);  //发送输出参数的类型

            //3为参数的位置,后面那个参数为输出参数的类型(整形)

            sp.execute(); // 执行存储过程

            int flag=sp.getInt(3);



0 0
原创粉丝点击