- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第10章 Hibernate对持久化对象的操作精要
本例以对9.3.2节多对多关系的student关系表进行批量插入为例,说明批量操作的具体过程,这里假设批量插入500个学生到数据库中: Transaction ts = session.beginTransaction(); for(int i=0;i500;i++){ Student stu = new Student(); // 这里设置学号为“0811”+i,实际应用中学生对象已经放在集合或数组中,只要取出即可 stu.setSnumber(0811+i); session.save(stu); if(i%50==0){ // 以50个学生为一个批次向数据库中提交,此值应与配置的批量尺寸一致 session.flush(); // 将该批量数据立即插入数据库中 session.clear(); // 清空缓存区,释放内存供下批数据使用 } ? } mit(); 2. 绕过Hibernate直接调用JDBC进行插入 由于Hibernate只是对JDBC进行了轻量级的封装,因此完全可以绕过Hibernate直接调用JDBC进行批量插入。因此,上例就可以改成如下代码: Transaction ts = session.beginTransaction(); session.doWork( new Work(){ public void execute(Connection connection)throws SQLException{ try { PreparedStatement stmt = connection.prepareStatement(insert into student(SNUMBER) values(?)); for (int i = 0; i 500; i++) { stmt.setString(1, 0811+i); stmt.addBatch(); // 添加到批处理命令中 } stmt.executeBatch(); // 执行批处理任务 } catch (SQLException e) { e.printStackTrace(); } } }); mit(); 1.由Hibernate直接进行批量更新 为了使Hibernate的HQL直接支持update的批量更新语法,首先在Hibernate的配置文件hibernate.cfg.xml中设置HQL/SQL查询翻译器属性“hibernate.query.factory_class”。设置如下: hibernate-configuration session-factory … property name=hibernate.query.factory_class ernal.ast.ASTQueryTranslatorFactory /property /session-factory hibernate-configuration 下面使用HQL批量更新把student表中的SAGE修改为20。由于这里是用Hibernate操作的,故HQL要用类对象及其属性。 Transaction ts = session.beginTransaction(); //在HQL查询中使用update进行批量更新 Query query = session.createQuery(update Student set sage=20); query.executeUpdate(); mit(); 2.绕过Hibernate调用JDBC进行批量更新 由于这里是直接操作数据库的,故要操作对应的表,而不是类。 Transaction ts = session.beginTransaction(); session.doWork( new Work(){ public void execute(Connection connection)throws SQLException{ try { Statement stmt = connection.createStatement(); //调用JDBC的update进行批量更新 stmt.executeUpdate(update student set SAGE=30); } catch (SQLException e) { e.printStackTrace(); } } }); mit(); 1.由Hibernate直接进行批量删除 下面将使用HQL批量删除student表中ID号大于300的学生。 Trans
文档评论(0)