hibernate调用存储过程

2014-11-24 01:34:33 · 作者: · 浏览: 0

使用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 中调用存储过程的几种方法。

第一种:命名查询

{call proc_stuInfo()}

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();否则没有数据返回。