使用hibernate 调用存储过程

 

public class StuInfo {

       private int id;

       private String stuName;

       private String stuNo;

       private int stuAge;

       private String stuId;

       private String stuSeat;

       private String stuAddress;setters();getters();}

 

 

对应的数据库表:

 

if exists(select * from sysobjects where name='stuInfo')

drop table stuInfo

create table stuInfo /*创建学员信息表**/

(

 stuName varchar(20) not null,-- 姓名,非空

 stuNo char(6) not null,-- 学号,非空

 stuAge int not null,-- 年齡,int 默认为4个长度

 stuId numeric(18,0),

 stuSeat smallint ,-- 坐位车,使用自增

 stuAddress text -- 住址 可以为空

)

-- 给stuInfo添加一列

alter table stuInfo add id int identity(1,1) primary key;

创建存储过程:

 

-- 存储过程

if exists(select name from sysobjects where name='proc_stuInfo' and type='p')

drop proc proc_stuInfo

go

create proc proc_stuInfo

as

 select * from stuInfo

go

-- 调用存储过程

exec proc_stuInfo;

 

在hibernate 中调用存储过程的几种方法。

 

第一种:命名查询

 

  <sql-query name="getStuInfo" callable="true"> 

     <return alias="stuInfo" class="com.hkrt.domain.StuInfo"> 

        <return-property name="id" column="id" /> 

              <return-property name="stuName" column="stuName" />

              <return-property name="stuAge" column="stuAge" />

              <return-property name="stuNo" column="stuNo"/>

              <return-property name="stuSeat" column="stuSeat" />

              <return-property name="stuAddress" column="stuAddress"/>

              <return-property name="stuId" column="stuId"/>

     </return> 

     {call proc_stuInfo()} 

  </sql-query>

       List li=session.getNamedQuery("getStuInfo").list(); 

              System.out.println(li.get(0));第二种:类型于jdbc

 

       System.out.println("jdbc 调用-------------");

              Connection conn = session.connection();   

              ResultSet rs =null; 

              CallableStatement call;

              try {

                     call = conn.prepareCall("{Call proc_stuInfo()}");

                     rs = call.executeQuery();

                   while(rs.next()){

                          System.out.println(rs.getString(1));

                          System.out.println(rs.getString(2));

                          System.out.println(rs.getString(3));

                          System.out.println(rs.getString(4));

                          System.out.println(rs.getString(5));

                          System.out.println(rs.getString(6));

                           System.out.println(rs.getString(7));

                          System.out.println("------------------");

                   }

              } catch (SQLException e) {

                     e.printStackTrace();

              } 

 

第三种:最简单的一种

 

       SQLQuery query =  session.createSQLQuery("{call proc_stuInfo()}").addEntity(StuInfo.class); 

       List list =query.list();

       System.out.println(list.get(0));

注:在第三种调用时,一定要加上addEntity();否则没有数据返回。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值