绕过hibernateapi,直接通过jdbcapi.docx

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
1. Hibernate 获取数据方式 Hibernate 获取数据的方式有不同的几种,其与缓存结合使用的效果也不尽相同,而 Hibernate 中具体怎么使用缓存其实是我们很关心的一个问题,直接涉及到性能方面。 缓存在 Hibernate 中主要有三个方面: 一级缓存、二级缓存和查询缓存; 一级缓存在 Hibernate 中对应的即为 session 范围的缓存,也就是当 session 关闭时缓存即被清除,一级缓存在 Hibernate 中是不可配置的部分; 二级缓存在 Hibernate 中对应的即为 SessionFactory 范围 的缓存, 通常来讲 SessionFactory 的生命周期和应用的生命周期相同, 所以可以看成是进程 缓存或集群缓存,二级缓存在 Hibernate 中是可以配置的,可以通过 class-cache 配置类粒 度级别的缓存 (class-cache 在 class 中数据发生任何变化的情况下自动更新 ) ,同时也可通 过 collection-cache 配置集合粒度级别的缓存 (collection-cache 仅在 collection 中增加 了元素或者删除了元素的情况下才自动更新,也就是当 collection 中元素发生值的变化的 2. Hibernate 批处理的实例分析 1:绕过 Hibernate API ,直接通过 JDBC API 来做,这个方法性能上是比较好的,也 是最快的。 ( 实例为 更新操作 ) Transaction tx=session.beginTransaction(); // 注意用的是 hibernate 事务处理边界 Connection conn=session.connection(); PreparedStatement stmt=conn.preparedStatement(update CUSTOMER as C set C.sarlary=c.sarlary+1 where c.sarlary1000); stmt.excuteUpdate(); mit(); // 注意用的是 hibernate 事务处理边界 这小程序中,采用的是直接调用 JDBC 的 API 来访问数据库,效率很高。避免了 Hibernate 先 查询出来加载到内存,再进行操作引发的性能问题。 2:运用存储过程。 以上两种方法, 可以参考我博客引用的相关文章。 ( 实例为 更新操作 ) 如果底层数据库(如 Oracle )支持存储过程,也可以通过存储过程来执行批量更新。存储过 程直接在数据库中运行,速度更加快。在 Oracle 数据库中可以定义一个名 为 batchUpdateCustomer() 的存储过程,代码如下: 代码内容 create or replace procedure batchUpdateCustomer(p_age in number) as begin update CUSTOMERS set AGE=AGE+1 where AGEp_age; end; 以上存储过程有一个参数 p_age,代表客户的年龄,应用程序可按照以下方式调用存储过程: 代码内容 tx = session.beginTransaction(); Connection con=session.connection(); String procedure = {call batchUpdateCustomer(?) }; CallableStatement cstmt = con.prepareCall(procedure); cstmt.setInt(1,0); // 把年龄参数设为 0 cstmt.executeUpdate(); mit(); 从上面程序看出, 应用程序也必须绕过 Hibernate API,直接通过JDBCAPI来调用存储过程。 3:还是用 Hibernate API 来进行常规的批量处理,可以也有变,变就变在,我们可以 在 查 找 出 一 定 的 量 的 时 候 , 及 时 的 将 这 些 数 据 做 完 操 作 就 删 掉 , session.flush();session.evict(XX 对象集 ); 这样也可以挽救一点性能损失。这个“一定 的量”要就要根据实际情况做定量参考了。 。 ( 实例为 保存操作 ) 业务逻辑为:我们要想数据库插入 10 0000 条数据 tx=session.beginTransaction(); for(int i=0;i100000;i++) { Customer custom=new Customer(); custom.setName(user+i); session.save(custom); if(

文档评论(0)

ld1556656 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档