`
747017186
  • 浏览: 331675 次
社区版块
存档分类
最新评论

hibernate调用mysql的存储过程

 
阅读更多

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调用存储过程具体方法

    hibernate本对数据库的操作有些不完美,有必要的时候可以调用存储过程来补足。

    java-hibernate调用mysql过程和函数的方式知识.pdf

    调用存储过程与调用函数类似,但不需要 `?=` 语句,例如: ```java CallableStatement cs = con.prepareCall("{call stu_pro(?,?,?)}"); ``` 在 Java 中,我们需要使用 `registerOutParameter()` 方法来注册输出...

    hibernate调用存储过程

    下面将详细解释Hibernate调用存储过程的相关知识点。 1. **存储过程的概念** 存储过程是预编译的SQL语句集合,存储在数据库服务器中,可以接受参数、返回结果并执行特定的数据库操作。它们提高了数据库性能,减少...

    java-hibernate调用mysql过程和函数的方式[归类].pdf

    2. **调用MySQL存储过程**: 调用存储过程与函数类似,但不需要`?=`前缀。例如,一个名为`stu_pro`的存储过程,它接受三个参数,可以这样调用: ```java CallableStatement cs = con.prepareCall("{call stu_pro...

    java-hibernate调用mysql过程和函数的方式.pdf

    本篇将详细讲解如何使用Hibernate调用MySQL的存储过程和函数。 首先,调用MySQL的函数通常涉及到`CallableStatement`接口。这个接口扩展自`PreparedStatement`,专门用于执行SQL的存储过程和函数。以下是一个简单的...

    Hibernate3调用存储过程用法

    在Java的持久化框架Hibernate中,调用数据库的存储过程是一项常见的需求。本文将深入探讨在Hibernate3中如何实现这一功能,以及相关的知识点。 一、为什么要使用存储过程 存储过程是预编译的SQL语句集合,它们在...

    hibernate调用存储过程[参考].pdf

    【hibernate调用存储过程】在软件开发中,尤其是涉及到数据库操作的Java应用中,Hibernate作为一款流行的ORM(对象关系映射)框架,能够极大地简化数据库操作。然而,有时我们可能需要使用到数据库的存储过程,这时...

    hibernate调用存储过程知识.pdf

    总结来说,这篇文章深入浅出地介绍了如何在Hibernate 3.x中使用存储过程,涵盖了创建存储过程、在Java代码中调用存储过程的关键步骤,为开发者提供了清晰的实践指导。这对于那些希望在Java应用中充分利用数据库功能...

    hibernate 3.1 存储过程

    在Java应用中,通过Hibernate调用存储过程可以帮助我们更好地管理和操作数据库。以下是对Hibernate 3.1中存储过程实现的一些关键知识点: 1. **配置存储过程**:在Hibernate的配置文件(如hibernate.cfg.xml)中,...

    Hibernate --调用存储过程(全).docx

    Hibernate,作为一个流行的Java对象关系映射(ORM)框架,虽然主要关注对象的持久化,但也提供了调用存储过程的能力。下面我们将详细探讨如何在Hibernate中调用存储过程。 首先,我们需要创建一个存储过程。例如,...

    Struts2 + Hibernate + mysql

    Struts2、Hibernate和MySQL是Java Web开发中的三个重要组件,它们构成了经典的MVC(Model-View-Controller)架构中的关键技术。在这个框架中,Struts2作为表现层框架,负责处理用户请求并控制应用程序流程;...

    Spring+Hibernate+MySql的应用实例

    2. **src/main/resources**:存储配置文件,如Spring的bean配置(applicationContext.xml)、Hibernate的实体映射文件(hbm.xml)以及数据库连接配置(hibernate.cfg.xml)。 3. **WEB-INF**:Web应用的配置文件...

    spring3.0+hibernate3.3+mysql8.0

    MySQL 8.0引入了诸多新特性,如窗口函数、JSON增强、InnoDB存储引擎的改进等。在与Spring和Hibernate整合时,需要正确配置MySQL的JDBC驱动(通常为`mysql-connector-java`),以便Spring的JdbcTemplate或Hibernate...

    Spring+Hibernate+Mysql简单搭建

    在Spring和Hibernate的整合中,Mysql作为后台存储,负责保存和检索数据。 整合Spring、Hibernate和Mysql的步骤大致如下: 1. **配置环境**:确保你的开发环境中已经安装了Java、Maven或Gradle(用于构建项目)、...

    SpringMvc+Hibernate+MySql Demo 源码

    在Spring MVC + Hibernate的组合中,MySQL作为数据存储后端,存储和检索应用所需的数据。Hibernate通过JDBC与MySQL交互,执行SQL语句,完成数据的读写操作。 **整合过程** 整合Spring MVC、Hibernate和MySQL通常...

    struts+hibernate+mysql

    而MySQL作为数据存储,保存网站的所有数据。在实际操作中,开发者可能还需要使用其他技术,如JSP或Servlet来渲染视图,或者Spring框架来增强依赖注入和AOP(面向切面编程)功能。 总的来说,"struts+hibernate+...

Global site tag (gtag.js) - Google Analytics