Hibernate调用存储过程

Sql代码 复制代码
  1. -------存储过程            
  2. create procedure insertEmp            
  3. @emName varchar(50),            
  4. @emAge int           
  5. as           
  6. begin           
  7.   insert into employee values(@emName,@emAge);            
  8. end           
  9.            
  10. create procedure updateEmp            
  11. @emId int,            
  12. @emName varchar(50),            
  13. @emAge int           
  14. as           
  15. begin           
  16.   update employee set emName=@emName,emAge=@emAge where emId=@emId;            
  17. end           
  18.            
  19. create procedure deleteEmp            
  20. @emId int           
  21. as           
  22. begin           
  23.   delete employee where emId=@emId;            
  24. end           
  25.            
  26. create procedure getEmpList            
  27. as           
  28. begin           
  29.   select * from employee            
  30. create procedure insertEmp            
  31. @emName varchar(50),            
  32. @emAge int           
  33. as           
  34. begin           
  35.   insert into employee values(@emName,@emAge);            
  36. end           
  37.            
  38. create procedure updateEmp            
  39. @emId int,            
  40. @emName varchar(50),            
  41. @emAge int           
  42. as           
  43. begin           
  44.   update employee set emName=@emName,emAge=@emAge where emId=@emId;            
  45. end           
  46.            
  47. create procedure deleteEmp            
  48. @emId int           
  49. as           
  50. begin           
  51.   delete employee where emId=@emId;            
  52. end           
  53.            
  54. create procedure getEmpList            
  55. as           
  56. begin           
  57.   select * from employee        
Xml代码 复制代码
  1. <?xml version="1.0" encoding="utf-8"?>             
  2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"             
  3. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">             
  4. <!--         
  5.     Mapping file autogenerated by MyEclipse Persistence Tools         
  6. -->             
  7. <hibernate-mapping>             
  8.     <class name="com.pojo.Employee" table="employee" catalog="master">             
  9.         <id name="emId" type="java.lang.Integer">             
  10.             <column name="emId" />             
  11.             <generator class="native" />             
  12.         </id>             
  13.         <property name="emName" type="java.lang.String">             
  14.             <column name="emName" length="20" />             
  15.         </property>             
  16.         <property name="emAge" type="java.lang.Integer">             
  17.             <column name="emAge" />             
  18.         </property>             
  19.     </class>             
  20.        <!--    在该文件中需注意<sql-query></sql-query>中的这段代码,调用的存储过程在其中定义,             
  21.        并定义了调用存储过程后将记录组装成Emp对象,同时对记录的字段与对象的属性进行相关映射。 -->             
  22.        <sql-query name="getEmpList" callable="true">             
  23.            <!--别名-->             
  24.            <return alias="employee" class="com.pojo.Employee">             
  25.               <return-property name="emId" column="emId" />             
  26.               <return-property name="emName" column="emName" />             
  27.               <return-property name="emAge" column="emAge" />             
  28.            </return>             
  29.            <!--这里调用查询的存储过程-->             
  30.             {call getEmpList}             
  31.       </sql-query>             
  32. </hibernate-mapping>        
Java代码 复制代码
  1. // 测试实现查询的存储过程             
  2.     private void testProcQuery(Session session) throws Exception {             
  3.        // 查询用户列表             
  4.        List list = session.getNamedQuery("getEmpList").list();             
  5.        for (int i = 0; i < list.size(); i++) {             
  6.            Employee em = (Employee) list.get(i);             
  7.            System.out.print("序号: " + (i + 1));             
  8.            System.out.print(", emid: " + em.getEmId());             
  9.            System.out.print(", emname: " + em.getEmName());             
  10.            System.out.println(",emage: " + em.getEmAge());             
  11.        }             
  12.     }             
  13.            
  14.     private void testProcUpdate(Session session) throws Exception {             
  15.        // 更新用户信息             
  16.        Transaction tx = session.beginTransaction();             
  17.        Connection con = session.connection();             
  18.        String procedure = "{call updateEmp(?, ?, ?)}";             
  19.        CallableStatement cstmt = con.prepareCall(procedure);             
  20.        cstmt.setInt(12);             
  21.        cstmt.setString(2"ddd");             
  22.        cstmt.setInt(3100);             
  23.        cstmt.executeUpdate();             
  24.        tx.commit();             
  25.     }             
  26.            
  27.     // 测试实现插入的存储过程             
  28.     private void testProcInsert(Session session) throws Exception {             
  29.        // 创建用户信息             
  30.        session.beginTransaction();             
  31.        PreparedStatement st = session.connection().prepareStatement(             
  32.               "{call insertEmp(?,?)}");             
  33.        st.setString(1"阿蜜果");             
  34.        st.setInt(212);             
  35.        st.execute();             
  36.        session.getTransaction().commit();             
  37.     }             
  38.            
  39.     // 测试实现删除的存储过程             
  40.     private void testProcDelete(Session session) throws Exception {             
  41.        // 删除用户信息             
  42.        session.beginTransaction();             
  43.        PreparedStatement st = session.connection().prepareStatement(             
  44.               "{call deleteEmp(?)}");             
  45.        st.setInt(11);             
  46.        st.execute();             
  47.        session.getTransaction().commit();             
  48.     }             
  49.            
  50.     public static void main(String[] args) throws Exception {             
  51.       ProTest pt=new ProTest();             
  52.       Session session=HibernateSessionFactory.getSession();             
  53.       pt.testProcQuery(session);             
  54.       //pt.testProcInsert(session);             
  55.        //pt.testProcDelete(session);             
  56.       //pt.testProcUpdate(session);             
  57.     }             
  58.            
  59. --------------   得到输出参数 ------------------             
  60.     public String countFeeByHand(final Date startTime, final String operBizId)             
  61.             throws DataAccessException {             
  62.         String destroyFee = (String) this.getHibernateTemplate().execute(             
  63.         new HibernateCallback() {             
  64.             public Object doInHibernate(Session session)             
  65.                     throws HibernateException, SQLException {             
  66.                 CallableStatement cs = session.connection().prepareCall(             
  67.                         "{call MANUAL_USER_SETTLEMENT(?,?,?,?)}");// 存储过程调用有错误             
  68.                 cs.setString(1, DateTools.getYearMonthString(startTime));             
  69.                 cs.setString(2, operBizId);             
  70.                 cs.registerOutParameter(3, Types.INTEGER);             
  71.                 cs.registerOutParameter(4, Types.CHAR);             
  72.                 cs.execute();             
  73.                 return cs.getString(4);   //得到输出参数             
  74.             }             
  75.         });             
  76.         return destroyFee;             
  77.     }        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值