关闭

检索策略

标签: ormhibernate
162人阅读 评论(0) 收藏 举报
分类:
1.检索策略目的,是为了提高程序的运行效率
(1) 尽量节省内存开销
       使用不到的数据,尽量不要加载内存中,浪费内存。
(2) 尽量发送少的SQL语句
        能从缓存中获取到的数据,就不要发送语句到数据库中来获取
        能用一条语句查询到的数据,尽量不要使用多条语句进行查询

2.类级别的检索策略
(1) get()
        立即查询
        返回结果:持久化对象或null
(2) load()
        延迟加载
        代理对象或异常或持久化对象(禁用)
(3) 设置类级别延迟加载?
       在<class>标签的lazy属性:
             true : 支持延迟加载.默认值
             false : 禁用延迟加载 ,还可以设置POJO类使用final修饰表示禁用延迟加载。
             Hibernate.initialize(customer):表示如果前面使用的延迟加载,但是后面需要立即用到,我们可以手动初始化POJO对象,Hibernate.initialize(pojo类名),使得变为立即加载。
(4) 延迟加载:推荐使用,提高性能
        延迟加载功能是通过动态代理实现的。
        Hibernate3版本:Cglib动态代理
        HIbernate4版本:Javassist动态代理
        这两种方式都是基于继承的方式实现动态代理的。也就是说,代理类是POJO类的子类。
        注意:POJO类不要使用final来修饰,否则,不能生产子类,也就无法生产代理类,也就无法使用延迟加载功能了。
(5) 延迟加载有效期问题?
        只要涉及延迟加载功能,session一旦关闭,那么,延迟加载就失效了,session失效后再使用延迟加载功能,就会报懒加载异常,也成为 no session异常。
        延长session存活时间,一般是在视图层利用延迟加载功能,展示完数据后,再进行关闭session.  
        具体解决方案:
             ThreadLocal<Session> + Filter 
             ThreadLocal<Session> + Interceptor

3.针对于n的一端的检索策略(一对多或多对多):<set>标签中设置
(1) lazy :
true : 表示支持延迟加载。对关联集合进行延迟加载。默认值。
false : 禁用延迟加载。先发一条查询一的一端,然后再发一条查询多的一端。
extra : 支持延迟加载。获取集合自身属性时,可以发送高效的查询语句。
        例如:查询集合长度,可以发送select count(*) 语句,统计集合长度,而不是将订单对象都查回到内存,再统计。
(2) batch-size :
如果设置了batch-size=5 可以减少发送对关联集合查询的语句条数
查询条件使用in的方式,根据多个用户id查询关联集合,对集合进行初始化;
(3) fetch :  抓取策略
select : 默认值,支持延迟加载。
subselect : fetch属性为subselect使用子查询的方式初始化所有Order集合(忽略batch-size)
join : 采用连接语句进行关联查询。
        延迟加载失效。 设置了<set>标签的fetch="join",对于HQL查询是无效果的。但是对于get()查询是起作用的。

4.针对于1的一端的检索策略(多对一):<many-to-one>/<one-to-one>
(1) lazy : 表示针对于一的一端是否支持延迟加载。
proxy : 支持延迟加载
        no-proxy : 支持延迟加载。但是,不是采用代理机制实现延迟加载的,通过第三方的字节码工具来实现延迟加载功能的.
false :禁用延迟加载。
         如果对端采用fetch="join",对当前端的关联查询是有影响的。
(2) fetch :
     select : 支持延迟加载的。默认值
     join : 表示采用“迫切左外连接”进行关联查询。此时,延迟加载功能失效了。
(3) batch-size :
     <class>标签上设置这个属性:
     表示在关联查询一的一端时,通过批量大小来对一的对象进行初始化,减少对一的一端初始化发送的语句的条数。
1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:7662次
    • 积分:663
    • 等级:
    • 排名:千里之外
    • 原创:58篇
    • 转载:2篇
    • 译文:0篇
    • 评论:3条
    最新评论