Hibernate(four)

//////////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:

true

org.hibernate.cache.EhCacheRegionFactory

true

ehcache.xml:

   

   

   

   

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

   

   

annotation:

@Cache(usage = CacheConcurrencyStrategy)

    ...

   

    ...

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

    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))