Hibernate jdbc查询及存储过程的实现

原创 2015年11月20日 17:40:56
1.通过jdbc来执行sql
Transaction tx = session.beginTransaction();
//获得该session使用的数据库连接
java.sql.connection con = session.connection();
PrepareStatement stmt = con.prepareStatement("update CUSTOMERS set AGE=AGE+1 where AGE>0");
stmt.executeUpdate();
tx.commit();


在Hibernate3中,尽管Session的connection方法还存在,但已经被废弃,不提倡使用了,不过Hibernate提供了
替代方案:org.hibernate.jdbc.Work接口表示直接通过JDBC API来访问数据库的操作,Work接口的execute()

方法用于执行直接通过JDBC API来访问数据库的操作:


Transaction tx = session.beginTransaction();
//定义一个匿名累类,实现了Work的接口
</pre><pre name="code" class="java">Work work = new Work(){
	public void execute(Connection connection) throws Exception{
		//通过JDBC API执行用于批量更新的SQL语句
		PrepareStatement stmt = connection.prepareStatement("update CUSTOMERS set AGE=AGE+1 where AGE>0");
		stmt.executeUpdate();
		
	}
};
//执行work
session.dowork(work);
tx.commit();


当通过JDBC API中的PrepareStatement接口来执行SQL语句时,SQL语句中涉及到的数据不会被加载到
Session的缓存中,因此不会占用内存空间。



2.实现存储过程
创建一个存储过程
create or replace procedure batch (p_age in number) as
begin 
	update CUSTOMERS set AGE=AGE+1 where AGE>p_age;
end;

除了可以直接在数据库直接运行存储过程,也可通过程序调用:
Transaction tx = session.beginTransaction();
//获得该session使用的数据库连接
java.sql.Connection con = session.connection();
String procedure = "{call batch(?)}";
//通过jdbc api调用存储过程
CallableStatement csmt = connection.prepareCall(procedure);
csmt.setInt(1,0);//把年龄参数设为0
csmt.executeUpdate();
tx.commit();

Hibernate3使用如下方式调用jdbc

Transaction tx = session.beginTransaction();
//定义一个匿名类实现了work接口
Work work = new Work(){
	public void execute(Connection connection) throws Exception{
		String procedure = "{call batch(?)}";
		//通过jdbc api调用存储过程
		CallableStatement csmt = connection.prepareCall(procedure);
		csmt.setInt(1,0);
		csmt.executeUpdate();
	}
};
//执行work
session.dowork(work);
tx.commit();



相关文章推荐

Hibernate-Criteria查询(3)DetachedCriteria构造查询条件、命名查询、原生SQL、调用存储过程(使用JDBC)

package junit.test;import static org.junit.Assert.*;import java.sql.CallableStatement; import java.s...

java调用存储过程(jdbc & hibernate)

-

hibernate里使用jdbc方式调用oracle带游标返回参数的简单分页存储过程

最近要学一个hibernate调用游标,找来找去也没找到如何调用,最后看了许多文章,用jdbc方式来调用也是可以的,但是效率上就不行了,因为每次都要连接数据库,从而放弃了hibernate的对象持久化...

jdbc调用存储过程实现增删改查

  • 2016年08月31日 10:49
  • 8KB
  • 下载

JDBC如何实现对存储过程的调用

  • 2014年06月25日 16:02
  • 530KB
  • 下载

java-JDBC简单的利用存储过程来《查询》或者《插入》

首先我创建了一个插入学生信息的存储过程,名为pro_insert CREATE procedure [dbo].[pro_insert] @name varchar(20), @sex varc...
  • cm_1234
  • cm_1234
  • 2016年08月22日 12:41
  • 132

jdbc_分页查询,大数据,批处理,存储过程

分页查询 实际上就是每次查询一部分记录,并显示: select * from table_name limit StartIndex, PageSize;——>StartIndex:从第几个记...

JDBC调用mysql存储过程实现分页效果

数据库测试表: 需求:通过输入pageNow和pageSize返回数据库对应的数据记录drop procedure if exists fenye;delimter $ create procedu...

如何实现 JDBC调用Oracle的存储过程

鸣谢:http://sishuok.com/forum/blogPost/list/488.html 从以下情况分别介绍:JDBC执行存储过程的四种情况         [1]、只有输入IN参...
  • Hollboy
  • Hollboy
  • 2013年02月17日 20:23
  • 489
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Hibernate jdbc查询及存储过程的实现
举报原因:
原因补充:

(最多只允许输入30个字)