zoukankan      html  css  js  c++  java
  • Hibernate3.2 中使用视图

        这次在优化系统中,由于客户使用的SQL server 2005的标准版,此版本不支持分区功能,但如果不分区,系统优化的效果就不会很明显。后来使用了分区视图。

     在系统中,没有使用对象关联,发现很多地方为查询信息,多次读取数据库。后来也用视图进行封装。

        本文就讨论在Hibernate3.2如何配合使用数据库视图技术。

         1, 使用分区视图

         2, 使用视图

      

       以上两中视图,是我这次在Hibernate中优化的视图方式,下面来分别介绍这两个类型视图的使用,以及为何要使用他们

        1,使用分区视图

           这时系统客户采用的是SQL server 2005 的标准版,sql 2005企业版只有分区功能,其他版本不可能有。但客户是购买的是正版,要他们使用D版,他们就是不同意,说是大公司,查出来很麻烦。不能用盗版。但分析数据库的慢的语句,这时如果不使用分区功能,其有时全表扫描是不可避免的,只有较少他的表大小。

         这时我们只有使用分区视图,按照一定的规则,将几个大的表拆分出来。

     

        在hibernate中表和视图是分开使用的,原有的配置文件不做任何改变就可以使用,同事为了使用分区功能,在程序使用是增加一个标志位来实现”分区消除“功能,减少扫描的数据量,结果数据性能大大提高。

     

      注意:1,新增加数据时必须设定其标志位,保证其插入的数据库的一张表中。不然会报错

               2,分区视图内的表字段和类型(包括长度)必须一致,要符合分区视图的条件

            

        2,使用一般视图

          这次在优化系统中,原有的配置文件,都没配对象关联,都是只对一个表配一个hbm文件,这时在系统里,为了取一个字段数据,要关联多张表时,这时就在多次读取数据库,有时是在循环里读取。还由于有时是left join,在HQL里,不在hbm文件配置对象关联是不能使用left join的。

          循环数据量小点还可以,一旦数据量多了,就很慢。

         这时就将需要的HQL语句转换成sql语句,将这个sql语句封装成视图,提供一下必要的查询接口,前台查询时就只查询这个视图,这个视图不在以来Hbm文件的配置文件和延迟加载等待问题了。

        这样一来,以前的有些多次读取数据库的情况就解决了。在添加适当的索引,速度很快就出来了。

       注意:这实际做的过程中,设定的id主键时,由于当时没考虑到hibernate的id唯一,造成了出来多条不同记录,但显示却是重复的记录,因为id一样,这时的hashCode是一致的。hibernate就直接去取了内存的数据,这时设定的id值在视图处理时要保证id主键值的唯一,重写hashCode值的生成机制,我当时处理是将多个字段组合成唯一字段,实际这个字段不需要使用和没有意义的。 

        以上是我在优化系统中,碰到的问题和解决办法,欢迎和大家交流!

        

  • 相关阅读:
    Java SPI机制详解
    ElasticSearch核心概念和原理
    多线程基础-线程创建、线程方法、线程状态等
    MyBatis-日志、分页、一对多or多对一
    MyBatis-注解开发、XML全局配置
    SpringMVC-数据输出、Map、Model、视图解析、处理Json
    SpringMVC-@RequestMapping、@PathVariable、Rest、POJO封装、乱码问题
    lazy loading img 图片延迟加载
    google 地图,多个标记 js库
    Jquery各版本下载,附Jquery官网下载方法
  • 原文地址:https://www.cnblogs.com/zping/p/1260267.html
Copyright © 2011-2022 走看看