Hibernate jdbc查询及存储过程的实现
2015-11-20 17:40
295 查看
1.通过jdbc来执行sql
在Hibernate3中,尽管Session的connection方法还存在,但已经被废弃,不提倡使用了,不过Hibernate提供了
替代方案:org.hibernate.jdbc.Work接口表示直接通过JDBC API来访问数据库的操作,Work接口的execute()
方法用于执行直接通过JDBC API来访问数据库的操作:
当通过JDBC API中的PrepareStatement接口来执行SQL语句时,SQL语句中涉及到的数据不会被加载到
Session的缓存中,因此不会占用内存空间。
2.实现存储过程
创建一个存储过程
除了可以直接在数据库直接运行存储过程,也可通过程序调用:
Hibernate3使用如下方式调用jdbc
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();
相关文章推荐
- $.ajax ie中发送post请求不成功
- 【阴影浮现效果】
- stl_hash_set.h
- 如何在Tableau Desktop中创建自定义调色板 - 优阅达
- sql中处理下划线、百分号等转义字符
- 反汇编奇怪代码,利用指令地址定位全局变量
- IntelliJ IDEA 11.1.3创建Maven Web项目
- Flume采集数据到HDFS时,生成的文件中,开头信息有乱码
- 【C++常识】C++的iostream标准库介绍 (转)
- stl_hash_map.h
- 新手适用Android开发的10大技巧
- andorid的四种启动模式 (第一行代码学习)
- 航空母舰为什么会取代战列舰
- 使用gem安装Jekyll时遇到Gem::RemoteFetcher::FetchError错误
- 未处理 System.InvalidCastExceptionMessage="无法将类型为“Microsoft.Office.Interop.Excel.ApplicationClass”的 CO
- TCP编程实践小结1
- 获取iOS系统版本 --- UIDevice的使用
- stl_algobase.h
- 协议森林05 我尽力 (IP协议详解)
- 贪心法实现无向图的划分 代码