Spring, Hibernate and Oracle Stored Procedures
一篇英文博文,写的是利用hibernate处理存储过程中的游标等等:
Motivation: While there are a few resources available online for calling stored procedures from Hibernate, it took me a while to stumble across one that mostly captures what I need. The intention of this blog entry is to put a similar example into my own words, to extend it slightly and hopefully to help anyone not experienced with Hibernate and Oracle to integrate Stored Procedures and Functions into an application quickly.
Setup Oracle 10g
For this example, we will be using Oracle 10g. We can initialize our schema user with SQLPlus with the following commands:
sqlplus connect as sysdba
create user my_orcl identified by my_orcl;
grant create session to my_orcl;
grant resource to my_orcl;
grant create table to my_orcl;
Setup a Project For Spring and Hibernate
We will download spring-framework-2.5.5-with-dependencies.zip, hibernate-distribution-3.3.1.GA-dist.zip and hibernate-annotations-3.4.0.GA.zip. We can create a standard project layout of src, test and lib folders with the following jars on the classpath:
spring-framework-2.5.5/dist/spring.jar
spring-framework-2.5.5/dist/modules/spring-test.jar
spring-framework-2.5.5/lib/jakarta-commons/commons-logging.jar
spring-framework-2.5.5/lib/jakarta-commons/commons-dbcp.jar
spring-framework-2.5.5/lib/jakarta-commons/commons-pool.jar
spring-framework-2.5.5/lib/jakarta-commons/commons-collections.jar
spring-framework-2.5.5/lib/dom4j/dom4j-1.6.1.jar
spring-framework-2.5.5/lib/log4j/log4j-1.2.15.jar
spring-framework-2.5.5/lib/slf4j/slf4j-api-1.5.0.jar
spring-framework-2.5.5/lib/slf4j/slf4j-log4j12-1.5.0.jar
spring-framework-2.5.5/lib/j2ee/*.jar
hibernate-annotations-3.4.0.GA/hibernate-annotations.jar
hibernate-annotations-3.4.0.GA/lib/hibernate-commons-annotations.jar
hibernate-distribution-3.3.1.GA/hibernate3.jar
hibernate-distribution-3.3.1.GA/lib/required/javassist-3.4.GA.jar
hibernate-distribution-3.3.1.GA/lib/required/slf4j-api-1.5.2.jar
Because we will be using Oracle Stored Procedures, we will also need a database driver such as
oracle/product/10.2.0/db_1/jdbc/lib/ojdbc14.jar
Create Domain Objects
We can setup our domain using annotated Java. For these examples, we need one simple domain Object.
package spring.hibernate.oracle.stored.procedures.domain;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = “AUTHOR”, schema = “MY_ORCL”)
public class Author implements java.io.Serializable {
private static final long serialVersionUID = 8676058601610931698L;
private int id;
private String firstName;
private String lastName;
@Id
@Column(name = “ID”, nullable = false)
public int getId() {
return this.id;
}
public void setId(final int id) {
this.id = id;
}
@Column(name = “FIRST_NAME”, nullable = false, length = 50)
public String getFirstName() {
return this.firstName;
}
public void setFirstName(final String firstName) {
this.firstName = firstName;
}
@Column(name = “LAST_NAME”, nullable = false, length = 50)
public String getLastName() {
return this.lastName;
}
public void setLastName(final String lastName) {
this.lastName = lastName;
}
}
Create a DAO
Now that we have a domain Object, we can create a DAO for a simple operation, such as looking up Authors by last name. Fortunately, Spring provides a convenient base class for DAO operations.
package spring.hibernate.oracle.stored.procedures.dao;
import java.util.List;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import spring.hibernate.oracle.stored.procedures.domain.Author;
public class AuthorDAO extends HibernateDaoSupport {
@SuppressWarnings(“unchecked”)
public List findByLastNameUsingHQL(final String lastName) {
return getHibernateTemplate().find(“from Author author where author.lastName = ?”, lastName);
}
}
The Spring Application Context Configuration
The Spring applicationContext.xml can reside directly at the root of our src classpath, and it will contain information for configuring Spring to manage our Hibernate sessions, transactions and datasources, as well as our DAO.
版权声明:本文为博主原创文章,未经博主允许不得转载。
Spring, Hibernate and Oracle Stored Procedures的更多相关文章
- [转]How to: Execute Oracle Stored Procedures Returning RefCursors
本文转自:http://www.telerik.com/help/openaccess-orm/openaccess-tasks-oracle-execute-sp-result-set.html I ...
- [转]Oracle Stored Procedures Hello World Examples
本文转自:http://www.mkyong.com/oracle/oracle-stored-procedures-hello-world-examples/ List of quick examp ...
- SSH面试题(struts2+Spring+hibernate)
struts2 + Spring +hibernate Hibernate工作原理及为什么要用? 原理: 1.读取并解析配置文件 2.读取并解析映射信息,创建SessionFactory ...
- SSH(Struts2+Spring+Hibernate)框架搭建流程<注解的方式创建Bean>
此篇讲的是MyEclipse9工具提供的支持搭建自加包有代码也是相同:用户登录与注册的例子,表字段只有name,password. SSH,xml方式搭建文章链接地址:http://www.cnblo ...
- SSH框架简化(struts2+spring+hibernate)
目的: 通过对ssh框架有了基础性的学习,本文主要是使用注解的方式来简化ssh框架的代码编写. 注意事项: 1.运行环境:Windows 8-64位,Eclipse(开发工具),jdk1.8.0_91 ...
- Spring/Hibernate 应用性能优化的7种方法
对于大多数典型的 Spring/Hibernate 企业应用而言,其性能表现几乎完全依赖于持久层的性能.此篇文章中将介绍如何确认应用是否受数据库约束,同时介绍七种常用的提高应用性能的速成法.本文系 O ...
- Performance Tuning of Spring/Hibernate Applications---reference
http://java.dzone.com/articles/performance-tuning For most typical Spring/Hibernate enterprise appli ...
- Spring / Hibernate 应用性能调优
来源:ImportNew - 陈晓舜 对大部分典型的Spring/Hibernate企业应用来说,应用的性能大部分由持久层的性能决定. 这篇文章会重温一下怎么去确认我们的应用是否是”数据库依赖(dat ...
- Spring+Hibernate实现动态SessionFactory切换
场景: 1)系统有多个数据库 2)且数据库类型也不尽相同 3)现在应用根据某些条件路由到具体的数据库 4)且在spring+hibernate框架下,支持依赖注入 已有实现,spring动态数据源,但 ...
随机推荐
- QT里面的delay使用
void delay() { QTime dieTime= QTime::currentTime().addSecs(1); while( QTime::currentTime() < dieT ...
- 高性能javascript学习总结(3)--数据访问
在 JavaScript 中,数据存储位置可以对代码整体性能产生重要影响.有四种数据访问类型:直接量,变量,数组项,对象成员. 直接量仅仅代表自己,而不存储于特定位置. JavaScr ...
- interface -- 接口类
<?php /** *为了声明接口,需要使用关键字interface *interface IExampleInterface {} *说明(大多数开发人员选择在节后名称前加上大写字母I作为前缀 ...
- Java多线程系列 JUC线程池07 线程池原理解析(六)
关闭“线程池” shutdown()的源码如下: public void shutdown() { final ReentrantLock mainLock = this.mainLock; // ...
- 【leetcode刷题笔记】Binary Tree Inorder Traversal
Given a binary tree, return the inorder traversal of its nodes' values. For example:Given binary tre ...
- 为什么要用redux?component自身管理自己的state难道不更解耦吗?
这是前几天百度2面的时候,面试官问我的一个问题.说实话当时有点紧张,其实也没去细想,本身react我就学了2个多星期,虽然看过redux这些源码,不过这个问题好像我从来没想过. 那其实react官网本 ...
- Linux电源管理(3)-Generic PM之reboot过程【转】
本文转载自:http://www.wowotech.net/pm_subsystem/reboot.html 1. 前言 在使用计算机的过程中,关机和重启是最先学会的两个操作.同样,这两个操作在Lin ...
- 【反思】一个价值两天的BUG,无论工作还是学习C语言的朋友都看看吧!
博文原创,转载请联系博主! 使用C语言也有两个年头了,BUG写出来过不少,也改过不少BUG.但是偏偏就是有这么一个BUG让我手头的项目停工了两天,原因从百度找到谷歌,资料从MAN手册找到RFC也没有找 ...
- SpringCloud之Eureka高可用集群环境搭建
注册中心集群 在微服务中,注册中心非常核心,可以实现服务治理,如果一旦注册出现故障的时候,可能会导致整个微服务无法访问,在这时候就需要对注册中心实现高可用集群模式. Eureka集群相当简单:相互注册 ...
- java中的向上转型
Person 可以表示为一个抽象的东西 就是人.比如说人可以唱歌, 就好比Person类中有一个sing方法.那么这个抽象的类(Person 人)可以具体到两类或者更多类 比如 男人,女人 .Man ...