Hibernate调用存储过程

Sql代码 复制代码
  1. -------存储过程
  2. createprocedureinsertEmp
  3. @emNamevarchar(50),
  4. @emAgeint
  5. as
  6. begin
  7. insertintoemployeevalues(@emName,@emAge);
  8. end
  9. createprocedureupdateEmp
  10. @emIdint,
  11. @emNamevarchar(50),
  12. @emAgeint
  13. as
  14. begin
  15. updateemployeesetemName=@emName,emAge=@emAgewhereemId=@emId;
  16. end
  17. createproceduredeleteEmp
  18. @emIdint
  19. as
  20. begin
  21. deleteemployeewhereemId=@emId;
  22. end
  23. createproceduregetEmpList
  24. as
  25. begin
  26. select*fromemployee
  27. createprocedureinsertEmp
  28. @emNamevarchar(50),
  29. @emAgeint
  30. as
  31. begin
  32. insertintoemployeevalues(@emName,@emAge);
  33. end
  34. createprocedureupdateEmp
  35. @emIdint,
  36. @emNamevarchar(50),
  37. @emAgeint
  38. as
  39. begin
  40. updateemployeesetemName=@emName,emAge=@emAgewhereemId=@emId;
  41. end
  42. createproceduredeleteEmp
  43. @emIdint
  44. as
  45. begin
  46. deleteemployeewhereemId=@emId;
  47. end
  48. createproceduregetEmpList
  49. as
  50. begin
  51. select*fromemployee
Xml代码 复制代码
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <!DOCTYPEhibernate-mappingPUBLIC"-//Hibernate/HibernateMappingDTD3.0//EN"
  3. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
  4. <!--
  5. MappingfileautogeneratedbyMyEclipsePersistenceTools
  6. -->
  7. <hibernate-mapping>
  8. <classname="com.pojo.Employee"table="employee"catalog="master">
  9. <idname="emId"type="java.lang.Integer">
  10. <columnname="emId"/>
  11. <generatorclass="native"/>
  12. </id>
  13. <propertyname="emName"type="java.lang.String">
  14. <columnname="emName"length="20"/>
  15. </property>
  16. <propertyname="emAge"type="java.lang.Integer">
  17. <columnname="emAge"/>
  18. </property>
  19. </class>
  20. <!--在该文件中需注意<sql-query></sql-query>中的这段代码,调用的存储过程在其中定义,
  21. 并定义了调用存储过程后将记录组装成Emp对象,同时对记录的字段与对象的属性进行相关映射。-->
  22. <sql-queryname="getEmpList"callable="true">
  23. <!--别名-->
  24. <returnalias="employee"class="com.pojo.Employee">
  25. <return-propertyname="emId"column="emId"/>
  26. <return-propertyname="emName"column="emName"/>
  27. <return-propertyname="emAge"column="emAge"/>
  28. </return>
  29. <!--这里调用查询的存储过程-->
  30. {callgetEmpList}
  31. </sql-query>
  32. </hibernate-mapping>
Java代码 复制代码
  1. //测试实现查询的存储过程
  2. privatevoidtestProcQuery(Sessionsession)throwsException{
  3. //查询用户列表
  4. Listlist=session.getNamedQuery("getEmpList").list();
  5. for(inti=0;i<list.size();i++){
  6. Employeeem=(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. privatevoidtestProcUpdate(Sessionsession)throwsException{
  14. //更新用户信息
  15. Transactiontx=session.beginTransaction();
  16. Connectioncon=session.connection();
  17. Stringprocedure="{callupdateEmp(?,?,?)}";
  18. CallableStatementcstmt=con.prepareCall(procedure);
  19. cstmt.setInt(1,2);
  20. cstmt.setString(2,"ddd");
  21. cstmt.setInt(3,100);
  22. cstmt.executeUpdate();
  23. tx.commit();
  24. }
  25. //测试实现插入的存储过程
  26. privatevoidtestProcInsert(Sessionsession)throwsException{
  27. //创建用户信息
  28. session.beginTransaction();
  29. PreparedStatementst=session.connection().prepareStatement(
  30. "{callinsertEmp(?,?)}");
  31. st.setString(1,"阿蜜果");
  32. st.setInt(2,12);
  33. st.execute();
  34. session.getTransaction().commit();
  35. }
  36. //测试实现删除的存储过程
  37. privatevoidtestProcDelete(Sessionsession)throwsException{
  38. //删除用户信息
  39. session.beginTransaction();
  40. PreparedStatementst=session.connection().prepareStatement(
  41. "{calldeleteEmp(?)}");
  42. st.setInt(1,1);
  43. st.execute();
  44. session.getTransaction().commit();
  45. }
  46. publicstaticvoidmain(String[]args)throwsException{
  47. ProTestpt=newProTest();
  48. Sessionsession=HibernateSessionFactory.getSession();
  49. pt.testProcQuery(session);
  50. //pt.testProcInsert(session);
  51. //pt.testProcDelete(session);
  52. //pt.testProcUpdate(session);
  53. }
  54. --------------得到输出参数------------------
  55. publicStringcountFeeByHand(finalDatestartTime,finalStringoperBizId)
  56. throwsDataAccessException{
  57. StringdestroyFee=(String)this.getHibernateTemplate().execute(
  58. newHibernateCallback(){
  59. publicObjectdoInHibernate(Sessionsession)
  60. throwsHibernateException,SQLException{
  61. CallableStatementcs=session.connection().prepareCall(
  62. "{callMANUAL_USER_SETTLEMENT(?,?,?,?)}");//存储过程调用有错误
  63. cs.setString(1,DateTools.getYearMonthString(startTime));
  64. cs.setString(2,operBizId);
  65. cs.registerOutParameter(3,Types.INTEGER);
  66. cs.registerOutParameter(4,Types.CHAR);
  67. cs.execute();
  68. returncs.getString(4);//得到输出参数
  69. }
  70. });
  71. returndestroyFee;
  72. }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值