hibiernate 调用oracle 存储过程

今天试了试 hibernate 调用存储过程
中间遇到了些问题,网上有很多,但是很多都是通过Session得到Connection 而后通过jdbc的方式调用存储过程,和hibernate 没有太大的关系,因此我把我的分享好
1.表结构只是举个例子
create table USERS
(
  ID       INTEGER not null,
  USERNAME VARCHAR2(20) not null,
  PASSWORD VARCHAR2(20) not null
)

2.存储过程定义好,我用了函数、用到了包
--head
create or replace package think is
   type result_cursor is ref cursor;
    function fselUser return result_cursor;
    function fselUser(na in varchar2) return result_cursor;
  end think;
--body   
   function fselUser
     return result_cursor is pcursor result_cursor;
     begin
      open pcursor for  select * from users;
     return pcursor;
  end fselUser; 

  function fselUser(na in varchar2) return result_cursor is pcursor result_cursor;
    sqlstr varchar(1000):='';
     begin
      sqlstr:='select * from users where users.username like ''%'||na||'%''';
      dbms_output.put_line(sqlstr);
      open pcursor for sqlstr;
      return pcursor;
   end fselUser;
end think;
3.XXX.hbm.xml的配置
  <hibernate-mapping package="dao">
    <class name="Users" table="USERS" schema="DING">
        <id name="id" type="java.lang.Long">
            <column name="ID" precision="22" scale="0" />
            <generator class="sequence">
             <param name="sequence">SEQ_USER_ID</param>
            </generator>
        </id>
        <property name="username" type="java.lang.String">
            <column name="USERNAME" length="20" not-null="true" />
        </property>
        <property name="password" type="java.lang.String">
            <column name="PASSWORD" length="20" not-null="true" />
        </property>
    </class>
    <sql-query callable="true" name="users">
    <return alias="users" class="Users">
    <return-property name="id" column="ID" />
    <return-property name="username" column="USERNAME" />
    <return-property name="password" column="PASSWORD" />
    </return>
    { ? = call think.fselUser(?) }
    </sql-query>

</hibernate-mapping>
4. 下面把调用说哈
   public List findUserByFunction(String str){
        Session  session= getHibernateTemplate().getSessionFactory().openSession();
    Query query=session.getNamedQuery("Users");
           query.setParameter(0, str);//索引从0开始的,设置参数
           List ll=query.list();
           session.close();
       return  ll;
   }
怎么使用就是你自己的事情了,以上代码仅做参考,有什么不对的地方还请指正,希望对你有所帮助

你可能感兴趣的:(oracle,Hibernate,xml,jdbc)