- 1、本文档共38页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第10章 Hibernate对持久化对象的操作[精选]
【实例10.3】通过配置文件调用存储过程。 应用9.3.2节多对多关联中的student表,对其映射文件Student.hbm.xml进行配置如下: … hibernate-mapping class name=org.model.Student table=student schema=dbo catalog=XSCJ … /class !-- 配置存储过程 -- sql-query name=selectStudent callable=true return alias=s class=org.model.Student return-property name=id column=ID/ return-property name=snumber column=SNUMBER/ return-property name=sname column=SNAME/ return-property name=sage column=SAGE/ /return {call selectAllStudent} /sql-query /hibernate-mapping 代码中的加黑部分是对存储过程的配置,下面看其在程序中的调用: ... List list = session.getNamedQuery(selectStudent).list(); … Iterator it = list.iterator(); while(it.hasNext()){ Student stu = (Student)it.next(); System.out.println(stu.getSname()); } ... 运行后查看控制台输出,如图10.4所示。 【实例10.4】绕过Hibernate直接使用JDBC调用存储过程。 自Hibernate 3.3.2版本之后,用“session.connection()”获取连接操作数据库的方法已经被弃用,按照Hibernate官方的计划,Hibernate 4推荐采用“session.doWork()”方法实现“org.hibernate.jdbc.Work”接口的新方式来使用JDBC API。不用修改映射文件,可以直接在程序中写代码调用存储过程,代码如下: import org.hibernate.jdbc.*; … session.doWork( new Work(){ // 定义一个匿名类,实现了Work接口 public void execute(Connection connection)throws SQLException{ try{ CallableStatement cstmt = connection.prepareCall({call selectAllStudent}); ResultSet rs = cstmt.executeQuery(); while(rs.next()){ System.out.println(rs.getString(3)); } }catch(Exception e){ e.printStackTrace(); } } }); 10.3.1 批量插入 1.通过Hibernate的缓存进行批量插入 使用这种方法时,首先要在Hibernate的配置文件hibernate.cfg.xml中设置批量尺寸属性“hibernate.jdbc.batch_size”,且最好关闭Hibernate的二级缓存以提高效率。例如: hibernate-configuration session-factory … property name=hibernate.jdbc.batch_size50/property // 设置批量尺寸 property name=hibernate.cache.use_second_level_cachefalse/property// 关闭二级缓存 /session-factory /hibernate-configuration 本例以对9.3.2节多对多关系的student关系表进行批量插入为例,说明批量操作的具体过程,这里假设批量插入500个学生到数据库中: Transaction ts = session.beginTransaction(); for(int i=0;i500;i++){ Student stu = new Student(); // 这里设置学号为“0811”+i,实际应用中学生对象已
文档评论(0)