您现在的位置是:首页 >

批量处理单元格 Hibernate的批量处理[1]

火烧 2022-02-08 01:46:21 1069
Hi er ate的批量处理[1]   Hi er ate批量处理其实从性能上考虑 它是很不可取的 浪费了很大的内存 从它的机制上讲 Hi er ate它是先把符合条件的数据查出来 放到内存当中 然后

Hibernate的批量处理[1]  

  Hibernate批量处理其实从性能上考虑 它是很不可取的 浪费了很大的内存 从它的机制上讲 Hibernate它是先把符合条件的数据查出来 放到内存当中 然后再进行操作 实际使用下来性能非常不理想 在笔者的实际使用中采用下面的第三种优化方案的数据是 条数据插入数据库 主流台式机的配置 需要约 分钟 呵呵 晕倒

  总结下来有三种来处理以解决性能问题

   绕过Hibernate API 直接通过 JDBC API 来做 这个方法性能上是比较好的 也是最快的

批量处理单元格 Hibernate的批量处理[1]

   运用存储过程

   还是用Hibernate API 来进行常规的批量处理 可以也有变 变就变在 我们可以在查找出一定的量的时候 及时的将这些数据做完操作就

  删掉 session flush() session evict(XX对象集) 这样也可以挽救一点性能损失 这个 一定的量 要就要根据实际情况做定量参考了 一般为 左右 但效果仍然不理想

   绕过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+ where c sarlary> )

    stmt excuteUpdate()

    tx mit() //注意用的是hibernate事务处理边界

  这小程序中 采用的是直接调用JDBC 的API 来访问数据库 效率很高 避免了Hibernate 先查询出来加载到内存 再进行操作引发的性能问题

   运用存储过程 但这种方式考虑到易植和程序部署的方便性 不建议使用 (实例为 更新操作)

  如果底层数据库(如Oracle)支持存储过程 也可以通过存储过程来执行批量更新 存储过程直接在数据库中运行 速度更加快 在Oracle数据库中可以定义一个名为batchUpdateCustomer()的存储过程 代码如下

    create or replace procedure batchUpdateCustomer(p_age in number) as begin update CUSTOMERS set AGE=AGE+ where AGE>p_age end

  以上存储过程有一个参数p_age 代表客户的年龄 应用程序可按照以下方式调用存储过程

  tx = session beginTransaction()

    Connection con=session connection()

    String procedure = {call batchUpdateCustomer(?) }

    CallableStatement cstmt = con prepareCall(procedure)

    cstmt setInt( ) //把年龄参数设为

    cstmt executeUpdate()

    tx mit()

  从上面程序看出 应用程序也必须绕过Hibernate API 直接通过JDBC API来调用存储过程

lishixinzhi/Article/program/Java/ky/201311/29173  
永远跟党走
  • 如果你觉得本站很棒,可以通过扫码支付打赏哦!

    • 微信收款码
    • 支付宝收款码