您好,登錄后才能下訂單哦!
Hibernate中怎么調(diào)用存儲過程,相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。
下邊是簡單的Hibernate存儲過程
Java代碼:
create PROCEDURE proc() begin select * from proctab; end ; create PROCEDURE proc() begin select * from proctab; end ;
Hibernate存儲過程調(diào)用的一種方法是通過Hibernate傳統(tǒng)的xml映射方式去調(diào)用。
Java代碼:
<class name="com.test.User" table="proctab"> <id name="id" column="id"> <generator class="native"/> </id> <property name="name" column="name" type="string" /> <property name="age" column="age" type="integer" /> </class> <sql-query name="getUser" callable="true"> <return alias="user" class="com.test.User"> <return-property name="id" column="id" /> <return-property name="name" column="name" /> <return-property name="age" column="age" /> </return> {call proc()} </sql-query> <class name="com.test.User" table="proctab"> <id name="id" column="id"> <generator class="native"/> </id> <property name="name" column="name" type="string" /> <property name="age" column="age" type="integer" /> </class> <sql-query name="getUser" callable="true"> <return alias="user" class="com.test.User"> <return-property name="id" column="id" /> <return-property name="name" column="name" /> <return-property name="age" column="age" /> </return> {call proc()} </sql-query>
調(diào)用方法 Java代碼:
Session ss= HibernateSessionFactory.getSession() List li=ss.getNamedQuery("getUser").list(); ss.close(); Session ss= HibernateSessionFactory.getSession() List li=ss.getNamedQuery("getUser").list(); ss.close();
及其類似jdbc的方法 Java代碼:
Session session =HibernateSessionFactory.getSession(); Connection conn = session.connection(); ResultSet rs =null; CallableStatement call = conn.prepareCall("{Call proc()}"); rs = call.executeQuery(); rs.close(); session.close(); Session session =HibernateSessionFactory.getSession(); Connection conn = session.connection(); ResultSet rs =null; CallableStatement call = conn.prepareCall("{Call proc()}"); rs = call.executeQuery(); rs.close(); session.close();
這種方法基本上就是jdbc,不過很簡單,總是感覺怪怪的~還有就是通過強(qiáng)大的createSQLQuery來實現(xiàn),o(∩_∩)o...哈哈 個人比較喜歡這種方法
Java代碼:
Session session =HibernateSessionFactory.getSession(); SQLQuery query = session.createSQLQuery("{Call proc()}"); List list =query.list(); session.close(); Session session =HibernateSessionFactory.getSession(); SQLQuery query = session.createSQLQuery("{Call proc()}"); List list =query.list(); session.close();
如果沒有返回值 直接用execute的方法就可以了,(*^__^*) 忘了一個重要的問題就是Hibernate存儲過程的傳參問題
Java代碼:
CallableStatement call = conn.prepareCall("{Call proc(?)}"); call.setString(1, 參數(shù)); rs = call.executeQuery(); CallableStatement call = conn.prepareCall("{Call proc(?)}"); call.setString(1, 參數(shù)); rs = call.executeQuery();
Java代碼:
SQLQuery query = session.createSQLQuery("{Call proc(?)}"); query.setString(0, 參數(shù)); List list =query.list();
看完上述內(nèi)容,你們掌握Hibernate中怎么調(diào)用存儲過程的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。