hibernate调用存储过程:
第一种不带参数的调用:
public List<MarkingTask> testList() {
// TODO Auto-generated method stub
Session s=null;
List<MarkingTask> listStudent=new ArrayList<MarkingTask>();
int i=1;
try {
s=getSession();
SQLQuery query = s.createSQLQuery("{Call test()}");//不带参数的调用很简单,但是要注意sql语句的写法,必须用“{}”包围起来
query.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
List<Map> list = query.list();
if(list!=null&&list.size()!=0){
for (Map map : list)
{
System.out.println(map.get("TASKID"));
}
}
} catch (Exception e) {
e.printStackTrace();
}finally{
if(null != s){
CloseHelper.close(s);
}
}
return listStudent;
}
第二种:带参数的调用(这种方法要特别注意,参数的类型只能是IN,不能是OUT和INOUT,我在这里就是参数搞错了,郁闷死我了)
public List<MarkingTask> testList() {
// TODO Auto-generated method stub
Session s=null;
List<MarkingTask> listStudent=new ArrayList<MarkingTask>();
int i=1;
try {
s=getSession();
SQLQuery query = s.createSQLQuery("{Call test(?)}");//用占位符
query.setInteger(0, i);
query.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
List<Map> list = query.list();
if(list!=null&&list.size()!=0){
for (Map map : list)
{
System.out.println(map.get("TASKID"));
}
}
} catch (Exception e) {
e.printStackTrace();
}finally{
if(null != s){
CloseHelper.close(s);
}
}
return listStudent;
}
------------------------------------------------------------------------------------------------------------------------------
值得注意的是如果存储过程里面涉及到事物的操作(增删改)的时候,必须在hibernate里面对过程声明事物,如果出现操作失败及时回滚,因为过程里面可能有多个涉及到事物的操作,可能是最后一个操作失败,所以我们必须如果有一个 操作失败那么所有的操作都必须回滚到原来的操作状态。
看个例子:
事物:
BEGIN
INSERT INTO eps_epub_task(TASKID,RES_PAPERID) VALUES(1,100);
UPDATE eps_epub_task1 SET RES_PAPERID=200 WHERE TASKID=1;//如果这一步操作失败,那么前面的insert语句插入的数据必须回滚
SELECT TASKID FROM eps_epub_task;
END
java代码:
@Override
public List<MarkingTask> testList() {
// TODO Auto-generated method stub
Session s=null;
Transaction t=null;//声明事物
List<MarkingTask> listStudent=new ArrayList<MarkingTask>();
int i=1;
try {
s=getSession();
t=beginTransaction(s);创建事物
SQLQuery query = s.createSQLQuery("{Call test(?)}");
query.setInteger(0, i);
query.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
List<Map> list = query.list();
t.commit();//如果过程没问题则提交事物
if(list!=null&&list.size()!=0){
for (Map map : list)
{
System.out.println(map.get("TASKID"));
}
}
} catch (Exception e) {
t.rollback();//有异常则回滚
e.printStackTrace();
}finally{
if(null != s){
CloseHelper.close(s);
}
}
return listStudent;
}
相关推荐
hibernate本对数据库的操作有些不完美,有必要的时候可以调用存储过程来补足。
调用存储过程与调用函数类似,但不需要 `?=` 语句,例如: ```java CallableStatement cs = con.prepareCall("{call stu_pro(?,?,?)}"); ``` 在 Java 中,我们需要使用 `registerOutParameter()` 方法来注册输出...
下面将详细解释Hibernate调用存储过程的相关知识点。 1. **存储过程的概念** 存储过程是预编译的SQL语句集合,存储在数据库服务器中,可以接受参数、返回结果并执行特定的数据库操作。它们提高了数据库性能,减少...
2. **调用MySQL存储过程**: 调用存储过程与函数类似,但不需要`?=`前缀。例如,一个名为`stu_pro`的存储过程,它接受三个参数,可以这样调用: ```java CallableStatement cs = con.prepareCall("{call stu_pro...
本篇将详细讲解如何使用Hibernate调用MySQL的存储过程和函数。 首先,调用MySQL的函数通常涉及到`CallableStatement`接口。这个接口扩展自`PreparedStatement`,专门用于执行SQL的存储过程和函数。以下是一个简单的...
在Java的持久化框架Hibernate中,调用数据库的存储过程是一项常见的需求。本文将深入探讨在Hibernate3中如何实现这一功能,以及相关的知识点。 一、为什么要使用存储过程 存储过程是预编译的SQL语句集合,它们在...
【hibernate调用存储过程】在软件开发中,尤其是涉及到数据库操作的Java应用中,Hibernate作为一款流行的ORM(对象关系映射)框架,能够极大地简化数据库操作。然而,有时我们可能需要使用到数据库的存储过程,这时...
总结来说,这篇文章深入浅出地介绍了如何在Hibernate 3.x中使用存储过程,涵盖了创建存储过程、在Java代码中调用存储过程的关键步骤,为开发者提供了清晰的实践指导。这对于那些希望在Java应用中充分利用数据库功能...
在Java应用中,通过Hibernate调用存储过程可以帮助我们更好地管理和操作数据库。以下是对Hibernate 3.1中存储过程实现的一些关键知识点: 1. **配置存储过程**:在Hibernate的配置文件(如hibernate.cfg.xml)中,...
Hibernate,作为一个流行的Java对象关系映射(ORM)框架,虽然主要关注对象的持久化,但也提供了调用存储过程的能力。下面我们将详细探讨如何在Hibernate中调用存储过程。 首先,我们需要创建一个存储过程。例如,...
Struts2、Hibernate和MySQL是Java Web开发中的三个重要组件,它们构成了经典的MVC(Model-View-Controller)架构中的关键技术。在这个框架中,Struts2作为表现层框架,负责处理用户请求并控制应用程序流程;...
2. **src/main/resources**:存储配置文件,如Spring的bean配置(applicationContext.xml)、Hibernate的实体映射文件(hbm.xml)以及数据库连接配置(hibernate.cfg.xml)。 3. **WEB-INF**:Web应用的配置文件...
MySQL 8.0引入了诸多新特性,如窗口函数、JSON增强、InnoDB存储引擎的改进等。在与Spring和Hibernate整合时,需要正确配置MySQL的JDBC驱动(通常为`mysql-connector-java`),以便Spring的JdbcTemplate或Hibernate...
在Spring和Hibernate的整合中,Mysql作为后台存储,负责保存和检索数据。 整合Spring、Hibernate和Mysql的步骤大致如下: 1. **配置环境**:确保你的开发环境中已经安装了Java、Maven或Gradle(用于构建项目)、...
在Spring MVC + Hibernate的组合中,MySQL作为数据存储后端,存储和检索应用所需的数据。Hibernate通过JDBC与MySQL交互,执行SQL语句,完成数据的读写操作。 **整合过程** 整合Spring MVC、Hibernate和MySQL通常...
而MySQL作为数据存储,保存网站的所有数据。在实际操作中,开发者可能还需要使用其他技术,如JSP或Servlet来渲染视图,或者Spring框架来增强依赖注入和AOP(面向切面编程)功能。 总的来说,"struts+hibernate+...