`
zhangygood
  • 浏览: 33392 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

HIBERNATE调用存储过程

阅读更多
一. 建表与初始化数据
    在mysql的test数据库中建立一张新表:tbl_user,建表语句如下:
  DROP TABLE IF EXISTS `user`;
  CREATE TABLE `tbl_user` (`userid` varchar(50) NOT NULL,
                                                   `name` varchar(50) default '',
                                                   `blog` varchar(50) default '',
                                                   PRIMARY KEY  (`userid`)
  ) ENGINE=InnoDB DEFAULT CHARSET=gb2312;

  建表成功后,在该表中任意插入几条数据。

二. 建立存储过程
  为测试hibernate3.x中存储过程的调用,我们在user表中建立getUserList、createUser、updateUser和deleteUser这   四个存储过程,在mysql中建立存储过程的语句如下:
  1. 获得用户信息列表的存储过程--getUserList
  DROP PROCEDURE IF EXISTS `getUserList`;
  CREATE PROCEDURE `getUserList`()
  begin
    select * from  tbl_user;
  end;

  2. 通过传入的参数创建用户的存储过程--createUser
    DROP PROCEDURE IF EXISTS `createUser`;
    CREATE PROCEDURE `createUser`(IN userid varchar(50), IN name varchar(50), IN blog varchar(50))
    begin
         insert into tbl_user values(userid, name, blog);
    end;

  3. 通过传入的参数更新用户信息的存储过程--updateUser
    DROP PROCEDURE IF EXISTS `updateUser`;
    CREATE PROCEDURE `updateUser`(IN nameValue varchar(50),

                     IN blogValue varchar(50),

                        IN useidValue varchar(50))
    begin
        update tbl_user set name = nameValue, blog = blogValue where userid = useridValue;
    end;

  4. 删除用户信息的存储过程--deleteUser
    DROP PROCEDURE IF EXISTS `deleteUser`;
    CREATE PROCEDURE `deleteUser`(IN useridValue int(11))
    begin
        delete from tbl_user where userid = useridValue;

    end;

  5.POJO类

    public class User {
      private String userid;
      private String name;    /** 用户姓名*/
      private String blog;     /** 用户blog*/
      //省略get/set方法
    }

  User.hbm.xml文件的内容如下:

  <hibernate-mapping package="com.amigo.proc.model">
    <class name="User" table="tbl_user">
            <id name="userid" column="userid">
        <generator class="assigned"/>
      </id>
      <property name="name" column="name" type="string" />
      <property name="blog" column="blog" type="string" />
    </class>

    <sql-query name="getUserList" callable="true">
      <return alias="user" class="User">
        <return-property name="userid" column="userid"/>
        <return-property name="name" column="name"/>
        <return-property name="blog" column="blog" />

      </return>
      {call getUserList()}
    </sql-query>
  </hibernate-mapping>

  在该文件中需注意<sql-query></sql-query>中的这段代码,调用的存储过程在其中定义,并定义了调用存储过程后将  记录组装成User对象,同时对记录的字段与对象的属性进行相关映射。

三.hibernate调用存储过程的测试类
  本类是该例的核心类,在本类中,以实例清楚地说明了在hibernate中如何调用存储过程,例示了hibernate调用查   询、更新、插入和删除这四类存储过程的方法,该类的内容如下:

  // hibernate调用存储过程
  public class ProcTest ...{

    public static void main(String[] args) throws Exception ...{
      ProcTest proc = new ProcTest();
      Session session = HibernateSessionFactory.getSession();
      proc.testProcQuery(session);
      proc.testProcUpdate(session);
      System.out.println("update successfully");

      proc.testProcInsert(session);
      System.out.println("insert successfully");

      proc.testProcDelete(session);
      System.out.println("delete successfully");
      session.close();
    }
    // 测试实现查询的存储过程
    private void testProcQuery(Session session) throws Exception ...{
      //查询用户列表
      List list = session.getNamedQuery("getUserList").list();
      for (int i = 0; i < list.size(); i++) ...{
        User user = (User) list.get(i);
        System.out.print("序号: " + (i+1));
        System.out.print(", userid: " + user.getUserid());
        System.out.print(", name: " + user.getName());
        System.out.println(", blog: " + user.getBlog());
      }
    }

    // 测试实现更新的存储过程
    private void testProcUpdate(Session session) throws Exception ...{
      Transaction tx = session.beginTransaction();
      Connection con = session.connection();
      String procedure = "{call updateUser(?, ?, ?)}";
      CallableStatement cstmt = con.prepareCall(procedure);
      cstmt.setString(1, "潘志华");
      cstmt.setString(2, "http://user.qzone.qq.com/65447273?ptlang=2052");
            cstmt.setString(3, "sterning");
            cstmt.executeUpdate();
            tx.commit();
    }

    // 测试实现插入的存储过程
    private void testProcInsert(Session session) throws Exception ...{
      //创建用户信息
      session.beginTransaction();
            PreparedStatement st = session.connection().prepareStatement("{call  createUser(?, ?, ?)}");
            st.setString(1, "amigo");
            st.setString(2, "华");
            st.setString(3, "http://user.qzone.qq.com/65447273?ptlang=2052");
            st.execute();
            session.getTransaction().commit();
     }

    // 测试实现删除的存储过程
    private void testProcDelete(Session session) throws Exception ...{
      //删除用户信息
      session.beginTransaction();
      PreparedStatement st = session.connection().prepareStatement("{call deleteUser(?)}");
            st.setString(1, "amigo");
            st.execute();
            session.getTransaction().commit();
    }
  }
  在本类中,调用查询类存储过程时,调用session.getNamedQuery("…")方法来获得User.hbm.xml中配置的查询存储过程。在其余的存储过程调用的测试中,首先通过hibernate的session获得connection,然后调用connection对象的相应方法来实现存储过程的调用。
4
0
分享到:
评论

相关推荐

    hibernate调用存储过程

    hibernate调用存储过程 hibernate调用存储过程 hibernate调用存储过程 hibernate调用存储过程 hibernate调用存储过程 hibernate调用存储过程 hibernate调用存储过程

    hibernate调用存储过程的方法调用

    - **执行存储过程**:调用`executeUpdate`或`list`方法执行存储过程。对于无返回值的存储过程,通常使用`executeUpdate`;如果有结果集,可以使用`list`获取并处理结果。 - **处理结果**:如果存储过程返回结果,...

    spring hibernate执行存储过程的例子

    本文将深入探讨如何在Spring和Hibernate中执行存储过程,并基于描述中的例子进行解析。 首先,让我们了解Spring如何执行存储过程。Spring通过JdbcTemplate或NamedParameterJdbcTemplate提供存储过程的调用。...

    hibernate调用存储过程具体方法

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

    Hibernate 调用存储过程

    ### Hibernate调用存储过程详解 #### 一、建立存储过程 在进行Hibernate调用存储过程之前,首先需要在数据库中创建存储过程。本例中创建了一个名为`getUserInfo`的简单存储过程,其功能是从`user`表中选择所有记录...

    1、hibernate调用存储过程1

    总结,使用Hibernate调用存储过程,无论是不带参数还是带参数返回值的,都需要创建SQL查询或`CallableStatement`,设置参数,执行存储过程,并处理返回结果。在处理过程中,需要注意事务管理,确保数据的一致性。...

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

    调用存储过程时,我们需要创建一个Hibernate的Session对象,然后利用Session的`createSQLQuery`方法来执行存储过程。例如,调用`getUserList`过程可以写成: ```java Session session = HibernateUtil....

    hibernate框架调用存储过程

    总结来说,Hibernate调用存储过程是通过`StoredProcedureQuery`对象实现的,提供了更简便的对象化API。对比JDBC,Hibernate更注重开发者体验,而JDBC则更适合对数据库操作有深度控制的需求。在实际开发中,根据项目...

    hibernate query调用oracle存储过程

    在Hibernate中,调用存储过程通常通过Session对象的createNativeQuery()方法实现,这个方法用于创建原生SQL查询,可以方便地调用数据库的自定义SQL或者存储过程。以下是一个简单的示例,展示了如何调用一个不带参数...

    hibernate调用存储过程.docx

    在某些复杂场景下,比如需要执行存储过程或者复杂的SQL查询时,Hibernate也提供了相应的支持。以下我们将详细探讨如何在Hibernate中调用存储过程,并结合文档内容,讲解相关的知识点。 首先,存储过程是数据库中预...

    hibernate调用存储过程知识.pdf

    然后,实现这个接口,使用Hibernate的`Session`对象调用`createSQLQuery`方法来执行存储过程。例如,调用`getUserList`的实现可能是: ```java public void getUserList() { Session session = HibernateUtil....

    Hibernate使用存储过程

    在Hibernate中调用这个存储过程,我们需要创建一个事务,获取数据库连接,然后通过CallableStatement对象执行存储过程: ```java Transaction tx = session.beginTransaction(); Connection con = session....

    hibernate存储过程

    - 使用`Session.createSQLQuery()`方法创建SQLQuery对象,然后通过`addScalar()`指定返回值类型,`executeUpdate()`或`list()`执行存储过程。 3. **调用存储过程的方法** - **简单调用**:对于无参数或只接收输入...

    hibernate 3.1 存储过程

    3. **调用存储过程**:在Java代码中,你可以通过SessionFactory获取Session对象,然后使用`Session.createSQLQuery()`或`Session.doWork()`方法来执行存储过程。例如: ```java Session session = sessionFactory...

    hibernate调存储过程的方法.txt

    - 执行存储过程。 ```java SQLQuery sqlQuery = session.createSQLQuery("{call 漤(?)}"); sqlQuery.setString(0, "String"); sqlQuery.executeUpdate(); ``` 2. **使用JDBC API**: - 获取当前会话的连接...

    Hibernate存储过程的调用

    - 执行存储过程。 ```java Session session = sessionFactory.openSession(); StoredProcedureQuery query = session.createStoredProcedureQuery("batchUpdateStudent"); // 设置输入参数(如果有的话) ...

Global site tag (gtag.js) - Google Analytics