美文网首页
Hibernate(four)

Hibernate(four)

作者: javaMonkey | 来源:发表于2017-01-04 19:52 被阅读0次

    //////////2016-12-18 ~ 2016-12-19///////////

    int study_data(){

    Hibernate条件查询

    Criteria/DetachedCriteria

        继承自CriteriaSpecification

    Criteria

        对象须由session创建,通常称为在线查询

        支持FetchMode,排序,FlushMode和LockMode

    DetachedCriteria

        对象不需要session参与创建,通常称为离线查询

        支持FetchMode,排序

    Criterion/Projection

        Croterion是Criteria的查询条件

    Criterion的主要实现包括

        Example - 通过一个给定实例,构建一个条件查询

        Junction - conjunction/disjunction实例通过Restrictions

            Conjunction = and

            Disjunction = or

        SimpleExpression

        Projections主要是让Criteria能够进行报表查询,并可以实现分组

        Projections查询返回的是查询结构的数组对象,并不是完整的映射实体对象

    Projection的主要实现包括

        Simoleprojection

        ProjectionList

        Property

    应用实例:

        Example:

            Criteria.add(Example.create())

        Conjunction:

            Restrictions.conjunction().add()

            Restrictions,disjunction().add()

        SimpleExpression:

            criteria.add(new SimpleExpression(*parentId*,parentId,*=*))

        Projections:

            Projections.projectionList() - 产生projectionList实例

            Projections.Property("propertyName") - 产生属性投影

            Projections.max(),min(),sum()... - 产生聚合函数

            Projections.groupProperty("propertyName") -  对属性进行group by

    Restrictions

    Restrictions.eq - 等于

    Restrictions.allEq - 参数为map,对比多个key/value

    Restrictions.gt - 大于

    Restrictions.ge - 大于等于

    Restrictions.lt - 小于

    Restrictions.le - 小于等于

    Restrictions.between - 对应SQL的between子句

    Restrictions.like - 对应SQl的like子句

    Restrictions.in - 对应SQl的in子句

    Restrictions.and - and关系

    Restrictions.or - or关系

    Restrictions.isNull - 判断属性是否为空,为空则返回true

    Restrictions.isNotNull - 与isNull相反

    Restrictions.sqlRestriction - SQl限定的查询

    缓存机制

    为了降低应用程序对物理数据源访问的频次,从而体改应用程序的运行性能

    一级缓存,又称为"Session的缓存"

    默认开启,无法关闭

    二级缓存,又称为"SessionFactory的缓存"

    可选缓存策略,默认不开启,非线程安全

    缓存访问策略

        执行对象查询时,受限查找一级缓存中是否存在对象,存在则返回

        不存在则查询二级缓存中是否存在对象,存在则返回

        不存在则生产SQL提交数据库查询

        由数据库返回内容包装成尸体对象,返回实体对象同时更新缓存

    一级缓存

    一级缓存管理

    管理一级缓存的常用方法

        veit(Object object) - 将指定的持久化对象从一级缓存中清除,释放对象所占用的内存资源,指定对象从持久化状态变为托管状态,从而成为游离对象

        clear() - 将一级缓存中的所有持久化对象清除,释放其占用的内存资源

        contains(Obejct obj) - 判断指定的对象是否存在与一级缓存中

        flush() - 刷新一级缓存区的内容,使之与数据库数据保持同步

    二级缓存

    适合采用二级缓存管理的数据

        很少被修改的数据

        不是很重要,允许偶尔出现并发的数据

        不会被并发访问的数据

        常量数据

    不适合采用二级缓存管理的数据

        经常被修改的数据

        绝对不允许出现并发访问的数据,如财务数据,绝对不允许出现并发

        与其他应用共享的数据

    二级缓存配置(EhCache)

    hibernate.conf.xml:

    <!-- 设置开启二级缓存 -->

    <property name="hibernate.cache.use_second_level_cache">true</property>

    <!-- 设置二级缓存插件EhCache的Provider类 -->

    <property name="hibetnate.cache.region.factory_class">org.hibernate.cache.EhCacheRegionFactory</property>

    <!-- 启动"查询缓存" -->

    <property name="hibetnate.cache.use_query_cache">true</property>

    ehcache.xml:

    <ehcache>

        <!-- 缓存的硬盘的路径 -->

        <diskStore path="C:\Users\tencent\workspace\HibernateDemo\cache" />

        <!-- 默认设置

        maxElementsInMemory : 在内存中最大缓存的对象数据

        eternal                            : 缓存的对象是否永远不变

        timeToIdleSeconds        : 可以操作对象的时间

        timeToLiveSeconds       : 缓存中对象的生命周期,时间到后查询数据会从数据库重新读取

        overflowToDisk               : 内存满了,是否要缓存在硬盘 -->

        <defaultCache maxElementsInMemory="200" eternal="false"

        timeToIdleSeconds="50" timeToLiveSeconds="60" overflowToDisk="true" />

        <!-- 指定缓存的对象下面出现的属性覆盖上面出现的,没出现的继承上面的 -->

        <cache name="pojo.PlayerStatus" maxElementsInMemory="200"     eternal="false" timeToIdleSeconds="50" timeToLiveSeconds="60" overflowToDisk="true" />

    </ehcache>

    annotation:

    @Cache(usage = CacheConcurrencyStrategy)

    <class>

        ...

        <cache usage="read-writer" />

        ...

    </class>

    可选的二级缓存(并发)策略

        NONE - 不配置缓存并发策略

        READ-ONLY - 只读

        READ-WRITER - 读写

        NONSTRICT_READ_WRITER - 非严格读写

        TRANSACTIONAL - 事务性

    Lifecycle(回调)

    Hibernate通过实现Lifecycle接口执行回调,实体对象通过实现Lifecycle接口,就可在特定的持久化阶段执行特定的处理过程

    Lifecycle接口方法,抛出CallbackException:

        onSave(Session session):在实体对象save/insert操作之前调用

        onUpdate(Session session):在实体对象update操作之前调用

        onDelete(Session session):在实体对象delete操作之前调用

        onLoad(Session session):在实体对象被加载操作之后调用

    对POJO有侵入性

    Interceptor(拦截器)

    拦截器相关的接口和类

        org.hibernate.Interceptor - Interface

        org.hibernate.EmptyIntercept - Class

    设置拦截后,相应的操作都会先穿过一层层相应的拦截器,让拦截器执行预处理或善后处理

    }

    相关文章

      网友评论

          本文标题:Hibernate(four)

          本文链接:https://www.haomeiwen.com/subject/ufyivttx.html