美文网首页
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