浏览 41716 次
锁定老帖子 主题:通过hibernate去调用存储过程
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-03-25
可能是因为跨平台的考虑,好像这方面的资料还真的是上很少介绍(请允许我的孤陋寡闻) 说实话还真看不出来hibernate调用存储过程有什么优势 CREATE TABLE `proctab` ( `id` int ( 11 ) NOT NULL auto_increment, `Name` varchar ( 20 ), `age` int ( 11 ), PRIMARY KEY (`id`) ) 简单的存储过程 create PROCEDURE proc() begin select * from proctab; end ; 一种方法是通过hibernate传统的xml映射方式去调用 <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> 调用方法 Session ss= HibernateSessionFactory.getSession() List li=ss.getNamedQuery("getUser").list(); ss.close(); 及其类似jdbc的方法 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,不过很简单,总是感觉怪怪的~! 还有就是通过强大的createSQLQuery来实现 o(∩_∩)o...哈哈 个人比较喜欢这种方法 Session session =HibernateSessionFactory.getSession(); SQLQuery query = session.createSQLQuery("{Call proc()}"); List list =query.list(); session.close(); 如果没有返回值 直接用execute的方法就可以了 (*^__^*) 忘了一个重要的问题就是存储过程的传参问题 CallableStatement call = conn.prepareCall("{Call proc(?)}"); call.setString(1, 参数); rs = call.executeQuery(); SQLQuery query = session.createSQLQuery("{Call proc(?)}"); query.setString(0, 参数); List list =query.list(); o(∩_∩)o.. 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-03-28
在hibernate的参考手册上,写得很清楚的。。
|
|
返回顶楼 | |
发表时间:2008-03-29
createSQLQuery是nativequery
|
|
返回顶楼 | |
发表时间:2008-03-30
createSQLQuery是nativequery
??也就是说,可以直接执行数据库方言?? 类似Ibatis? |
|
返回顶楼 | |
发表时间:2008-03-31
我印象中 createSQLQuery所支持的sql 和原生sql还是不一样的吧
|
|
返回顶楼 | |