文档章节

hibernate 调用存储过程

吕兵阳
 吕兵阳
发布于 2015/10/17 11:35
字数 534
阅读 42
收藏 1

笔者参考原文:http://www.iteye.com/topic/176032

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

hibenate 调用带参的存储程

-- 带参数据的存储过程
if exists(select name from sysobjects where name='proc_find_stu' and type='p')
drop proc  proc_find_stu
go
create proc  proc_find_stu(@startId int,@endId int)
as
 select * from stuInfo where id between @startId and @endId;
go
exec proc_find_stu 1,4;

/**hibernate 调用带参的存储过程*/
	@SuppressWarnings("unchecked")
	@Test
	public void msTest2(){
		SessionFactory sf = SessionFactoyUtil.getSessionFactory();
		Session session = sf.openSession();
		SQLQuery query =   session.createSQLQuery("{CALL proc_find_stu(?,?)}").addEntity(StuInfo.class);
		query.setLong(0, 2);  
		query.setLong(1, 4);  
		List<StuInfo> list =query.list(); 
		 for(int i =0;i<list.size();i++){
			 System.out.println(list.get(i));
		 }
	}


结果信息:
Hibernate: 
    {CALL proc_find_stu(?,?)}
StuInfo [id=2, stuAddress=北京, stuAge=12, stuId=123456789012345687, stuName=李四, stuNo=112345, stuSeat=2]
StuInfo [id=4, stuAddress=北京, stuAge=12, stuId=123456789012345688, stuName=王五, stuNo=112345, stuSeat=3]



版权声明:本文为博主原创文章,未经博主允许不得转载。

本文转载自:http://blog.csdn.net/liuc0317/article/details/6626192

共有 人打赏支持
吕兵阳
粉丝 88
博文 275
码字总数 105273
作品 0
郑州
后端工程师
私信 提问
hibernate sql 查询

Hibernate 支持使用原生的SQL查询,使用原生SQL查询可以利用某些数据库特性,原生SQL查询也支持将SQL语句放在配置文件中配置,从而提高程序的解耦,命名SQL查询还可以用于调用存储过程。 SQL查...

DaDa-da
04/23
0
0
hibernate中调用存储过程

我搭建的一个ssh1(spring2.5.6+hibernate3.4+struts1.3.8)框架中需要提供一个调用存储过程的公有方法。 原理:这个其实和ssh没啥关系,主要是我们的java.sql.Connection中已经提供了这样的...

索隆
2012/06/23
0
0
Hibernate 存储过程的调用

本文讲述的是Hibernate 存储过程的调用,首先给出了简单的Hibernate存储过程并附其Java代码,然后给出了调用方法的Java代码,及其它相应的Java代码。 下边是简单的Hibernate存储过程 Java代码...

鉴客
2010/08/23
1K
1
hibernate调用mysql存储过程

 在mysql中创建两个存储过程,如下: 1、根据id查找某条数据: 1 CREATE PROCEDURE (IN id INTEGER(11))2 begin3 select * from emp where empId=id;4 end; 2、根据id查找某个字段,并返回 ...

开源中国-首席码农
2016/03/22
2
0
Hibernate调用存储过程示例(有参数,返回结果集)

1、存储过程 2、数据库客户端执行存储过程如下: 执行结果如下: 3、java代码通过hibernate调用存储过程 打印结果: FreezeMon:2017-09 meterid:0351-09768 4、hibernate取出存储过程的输出参...

ytangdigl
2017/10/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

特斯拉车主成功破解了自己Model 3汽车

据汽车博客Electrek消息,一位特斯拉车主成功破解了自己Model 3汽车,还在此基础上运行了Ubuntu。 这位叫trsohmers的网友表示,“功劳大多要归到Ingineerix的头上,他花了数月才找到初始的那...

linuxCool
12分钟前
0
0
Gitbook : random errors when using gitbook plugin on running "gitbook serve"

在执行gitbook serve时,会有不定的失败错误 参考问题 :#1309 解决方案: 更新gitbook版本,这个问题似乎是3版本的问题 , 官方也不打算在这个版本解决了。 更新 到最新版本后, 不再出现问...

ol_O_O_lo
26分钟前
0
0
提灯照暗,向内自省——《中国文化的深层结构》读书笔记3800字

提灯照暗,向内自省——《中国文化的深层结构》读书笔记3800字: 作者:王健茜;断断续续一个多月才读完了《中国文化的深层结构》,这并不是一本难懂的书,之所以读得慢,源于对书中观点的思...

原创小博客
29分钟前
0
0
高德地图-行政区域接口

1、获取全国各省信息 https://restapi.amap.com/v3/config/district?extensions=all&key=应用Key&s=rsv3&output=json 2、获取下级行政区域信息 https://restapi.amap.com/v3/config/distric......

voole
41分钟前
3
0
集群介绍 ..

12月19日任务 18.1 集群介绍 18.2 keepalived介绍 18.3/18.4/18.5 用keepalived配置高可用集群 一.集群介绍 根据功能划分为两大类:高可用和负载均衡 高可用集群通常为两台服务器,一台工作,...

hhpuppy
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部