Vincent

          Vicent's blog
          隨筆 - 74, 文章 - 0, 評論 - 5, 引用 - 0
          數據加載中……

          hibernate調用mysql5.0存儲過程小記

          準備工作:
          1.hibernate3
          到這下載hibernate3:
          http://sourceforge.net/project/showfiles.phpgroup_id=40712&package_id=127784&release_id=403223
          2.mysql (注意一定要用mysql5.0和最新驅動)
          ?mysql官方網站http://www.mysql.com/

          1.建張表
          CREATE?TABLE?`proctest`?(
          ??`id`?
          int(11)?NOT?NULL?auto_increment,
          ??`Name`?
          varchar(20)?default?'''''',
          ??`age`?
          int(11)?default?NULL,
          ??`address`?
          varchar(50)?default?'',
          ??
          PRIMARY?KEY??(`id`)
          )?ENGINE
          =InnoDB?DEFAULT?CHARSET=gb2312;
          插入幾條記錄
          INSERT?INTO?`proctest`?VALUES?(1,'tom',22,'http://www.aygfsteel.com');
          INSERT?INTO?`proctest`?VALUES?(2,'wujun',25,'http://www.aygfsteel.com/wujun');
          INSERT?INTO?`proctest`?VALUES?(3,'jerry',30,'深圳');
          INSERT?INTO?`proctest`?VALUES?(4,'wujun',40,'南昌');
          創建存儲過程
          --這只是一個例子,就來個簡單存儲過程
          create?PROCEDURE?testProc()
          begin
          ???
          select?*?from?proctest;
          end;



          打開eclipce新建個java工程,記的把hiberbate3類庫也一起加進去..
          看下結構圖:


          1.新建UserVO.java文件

          package?net.wj.proc.vo;

          public?class?UserVO?{
          ????
          private?int?id;
          ????
          private?String?name;
          ????
          private?int?age;
          ????
          private?String?address;
          ????
          public?UserVO()
          ????
          {}
          順便把它相對應的配置文件也寫上。。
          UserVO.hbm.xml?

          <?xml?version="1.0"?encoding='UTF-8'?>
          <!DOCTYPE?hibernate-mapping?PUBLIC
          ????????????????????????????"-//Hibernate/Hibernate?Mapping?DTD?3.0//EN"
          ????????????????????????????"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"?
          >

          <!--?DO?NOT?EDIT:?This?is?a?generated?file?that?is?synchronized?-->
          <!--?by?MyEclipse?Hibernate?tool?integration.???????????????????-->
          <!--?Created?Sat?Apr?22?17:08:56?CST?2006?????????????????????????-->
          <hibernate-mapping>

          ????
          <class?name="net.wj.proc.vo.UserVO"?table="proctest">
          ????????
          <id?name="id"?column="id">
          ????????????
          <generator?class="native"/>
          ????????
          </id>
          ????????
          ????????
          <property?name="name"?column="name"?type="string"?/>
          ????????
          <property?name="age"?column="age"?type="integer"?/>
          ????????
          <property?name="address"?column="address"?type="string"?/>

          ????
          </class>

          ????
          <!--sql查詢-->
          ?????
          <sql-query?name="select">
          ?????
          <![CDATA[select?{usr.*}?from?proctest?usr?]]>
          ?????
          <return?alias="usr"?class="net.wj.proc.vo.UserVO"?/>
          ?????
          </sql-query>

          ?????
          <!--調用存儲過程就在這里配了-->
          ????
          <sql-query?name="getUser"?callable="true">
          ?????
          <return?alias="user"?class="net.wj.proc.vo.UserVO">
          ?????
          ?????
          <return-property?name="id"?column="id"?/>
          ??????
          <return-property?name="name"?column="name"?/>
          ???????
          <return-property?name="age"?column="age"?/>
          ????????
          <return-property?name="address"?column="address"?/>
          ?????
          </return>
          ?????
          <!--這里就是我們剛剛創建的存儲過程名-->
          ?????{call?testProc()}
          ?????
          </sql-query>
          </hibernate-mapping>

          測試代碼
          package?net.wj.proc.test;


          import?java.util.List;

          import?org.hibernate.*;
          import?org.hibernate.cfg.*;
          import?net.wj.proc.vo.*;
          import?org.apache.log4j.*;


          public?class?ProcTest?{

          ????
          /**
          ?????*?
          @param?args
          ?????
          */

          ????Logger?log
          =Logger.getLogger(this.getClass());
          ????
          public?ProcTest()
          ????
          {}
          ????
          public?static?void?main(String[]?args)?{
          ????????System.out.print(
          "start.............................");
          ????????ProcTest?tt
          =new?ProcTest();
          ???????
          //?tt.LoadAll();
          ???????
          //?tt.ExampleSelect();
          ???????tt.ExampleProc();
          ????????
          ????}

          ????
          ????
          //得到Session,
          ????public?Session??getSession()
          ????
          {
          ????????
          try
          ????????
          {
          ????????????Configuration?cfg?
          =?new?Configuration().configure();
          ????????????SessionFactory?sf
          =cfg.buildSessionFactory();
          ????????????Session?ss
          =?sf.openSession();
          ????????????
          return?ss;

          ????????}

          ????????
          catch(Exception?ee)
          ????????
          {
          ????????????System.out.print(
          "失敗"+ee.getMessage());
          ????????????
          return?null;
          ????????}

          ??????
          ????}

          ????
          //這里調我們在UserVO.hbm.xml
          ????
          //sql-query?寫上的name屬性getUser
          ????public?void?ExampleProc()
          ????
          {
          ????????Session?ss
          =this.getSession();
          ????????List?li
          =ss.getNamedQuery("getUser").list();
          ????????
          for(int?i=0;i<li.size();i++)
          ????????
          {
          ????????????UserVO?vo
          =(UserVO)li.get(i);
          ????????????log.info(
          "name:"+vo.getName());
          ????????????log.info(
          "age"+vo.getAge());
          ????????????log.info(
          "address"+vo.getAddress());
          ????????}

          ????????ss.close();
          ????}

          ????
          //配置文件的sql查詢
          ????public?void?ExampleSelect()
          ????
          {
          ???????????Session?ss
          =this.getSession();
          ???????????List?li
          =?ss.getNamedQuery("select").list();
          ????????
          ???????????
          for(int?i=0;i<li.size();i++)
          ???????????
          {
          ????????????UserVO?vo
          =(UserVO)li.get(i);
          ????????????log.info(
          "name:"+vo.getName());
          ????????????log.info(
          "age"+vo.getAge());
          ????????????log.info(
          "address"+vo.getAddress());
          ???????????}

          ???????????ss.close();??
          ????}
          }


          記的用最新的驅動:
          要不然可能會報這個錯
          Exception?in?thread?"main"?org.hibernate.exception.GenericJDBCException:?could?not?execute?query
          ????at?org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:
          91)
          ????at?org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:
          79)
          ????at?org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:
          43)
          ????at?org.hibernate.loader.Loader.doList(Loader.java:
          2148)
          ????at?org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:
          2029)
          ????at?org.hibernate.loader.Loader.list(Loader.java:
          2024)
          ????at?org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:
          111)
          ????at?org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:
          1674)
          ????at?org.hibernate.impl.AbstractSessionImpl.list(AbstractSessionImpl.java:
          147)
          ????at?org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:
          164)
          ????at?net.wj.proc.test.ProcTest.ExampleProc(ProcTest.java:
          45)
          ????at?net.wj.proc.test.ProcTest.main(ProcTest.java:
          22)
          Caused?by:?java.sql.SQLException:?Callable?statments?not?supported.
          ????at?com.mysql.jdbc.Connection.prepareCall(Connection.java:
          1278)
          ????at?org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:
          439)
          ????at?org.hibernate.jdbc.AbstractBatcher.prepareCallableQueryStatement(AbstractBatcher.java:
          115)
          ????at?org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:
          1557)
          ????at?org.hibernate.loader.Loader.doQuery(Loader.java:
          661)
          ????at?org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:
          224)
          ????at?org.hibernate.loader.Loader.doList(Loader.java:
          2145)
          ?????
          8?more
          09:38:18,837??INFO?SessionFactoryImpl:153?-?building?session?factory
          09:38:18,917??WARN?Configurator:126?-?No?configuration?found.?Configuring?ehcache?from?ehcache-failsafe.xml?found?in?the?classpath:?jar:file:/E:/lib/hibernate3/ehcache-1.1.jar!/ehcache-failsafe.xml
          09:38:21,951??INFO?SessionFactoryObjectFactory:82?-?Not?binding?factory?to?JNDI,?no?JNDI?name?configured
          Hibernate:?
          {call?testProc()}
          09:38:22,482??WARN?JDBCExceptionReporter:71?-?SQL?Error:?0,?SQLState:?S1C00
          09:38:22,482?ERROR?JDBCExceptionReporter:72?-?Callable?statments?not?supported.

          源代碼http://www.aygfsteel.com/Files/wujun/Proc.rar

          是不是挺簡單的.

          posted on 2006-08-22 10:55 Binary 閱讀(274) 評論(0)  編輯  收藏 所屬分類: Hibernate

          主站蜘蛛池模板: 江油市| 乐山市| 精河县| 宝兴县| 通河县| 略阳县| 五常市| 廊坊市| 赤城县| 黔南| 兴安盟| 舒兰市| 浑源县| 玉屏| 遵义县| 桐城市| 准格尔旗| 定边县| 无棣县| 张家港市| 冀州市| 梁平县| 长治市| 蓬莱市| 平安县| 兴城市| 合山市| 平乡县| 都安| 阜城县| 绥棱县| 武宣县| 麻江县| 靖远县| 山阳县| 凯里市| 理塘县| 宁远县| 六枝特区| 全州县| 苍梧县|