Hibernate基础语义

Configuration
正如其名,Configuration 类负责管理Hibernate 的配置信息。

SessionFactory
SessionFactory 负责创建Session 实例。

Session
Session是持久层操作的基础,相当于JDBC中的Connection。

XDoclet 与Hibernate 映射
在POJO 中融合XDoclet 的映射文件自动生成机制,提供了除手动编码和由数据库导出
基础代码的第三种选择。

XDoclet实现基本原理是,通过在Java代码加入特定的JavaDoc tag,从而为其添加特定
的附加语义,之后通过XDoclet工具对代码中JavaDoc Tag进行分析,自动生成与代码对应
的配置文件,XDoclet。

数据检索

Criteria Query通过面向对象化的设计,将数据查询条件封装为一个对象。

Criteria criteria = session.createCriteria(TUser.class);
criteria.add(Expression.eq("name","Erica"));
criteria.add(Expression.eq("sex",new Integer(1)));

这里的criteria 实例实际上是SQL “Select * from t_user where
name=’Erica’ and sex=1”的封装。

Hibernate Query Language (HQL)
Criteria提供了更加符合面向对象编程模式的查询封装模式。不过,HQL(Hibernate
Query Lang

String hql = "from org.hibernate.sample.TUser";
Query query = session.createQuery(hql);
List userList = query.list();

HQL子句本身大小写无关,但是其中出现的类名和属性名必须注意大小写区分。

数据关联

一对一关联
配置:
Hibernate中的一对一关联由“one-to-one”节点定义。在*.hbm.xml 里边定义。

一对多关联
一对多关系在系统实现中也很常见。典型的例子就是父亲与孩子的关系。一对多关系分为单向一对多关系和双向一对多关系。
单向一对多关系只需在“一”方进行配置,双向一对多关系需要在关联双方均加以配置。

内容很杂,需要仔细看。。

数据访问
PO和VO
PO即 Persistence Object
VO即 Value Object
PO和VO是Hibernate中两个比较关键的概念。
首先,何谓VO,很简单,VO就是一个简单的值对象。

"

TUser user = new TUser();
user.setName("Emma");

"

这里的user就是一个VO。VO只是简单携带了对象的一些属性信息。

何谓PO? 即纳入Hibernate管理框架中的VO。

VO和PO的主要区别在于:
Ø VO是独立的Java Object。
Ø PO是由Hibernate纳入其实体容器(Entity Map)的对象,它代表了与数
据库中某条记录对应的Hibernate实体,PO的变化在事务提交时将反应到实
际数据库中。
如果一个PO与Session对应的实体容器中分离(如Session关闭后的PO),那么
此时,它又会变成一个VO。

关于unsaved-value
在非显示数据保存时,Hibernate将根据这个值来判断对象是否需要保存。
所谓显式保存,是指代码中明确调用session 的save、update、saveOrupdate方
法对对象进行持久化。如:
session.save(user);
而在某些情况下,如映射关系中,Hibernate 根据级联(Cascade)关系对联接类进
行保存。此时代码中没有针对级联对象的显示保存语句,需要Hibernate 根据对象当前状
态判断是否需要保存到数据库。此时,Hibernate即将根据unsaved-value进行判定。

Inverse和Cascade
Inverse,直译为“反转”。在Hibernate语义中,Inverse指定了关联关系中的
方向。
关联关系中,inverse=”false”的为主动方,由主动方负责维护关联关系。具体可
参见一对多关系中的描述。
而Cascade,译为“级联”,表明对象的级联关系,如TUser的Cascade设为all,
就表明如果发生对user对象的操作,需要对user所关联的对象也进行同样的操作。如对
user对象执行save操作,则必须对user对象相关联的address也执行save操作。
初学者常常混淆inverse和cascade,实际上,这是两个互不相关的概念。Inverse
指的是关联关系的控制方向,而cascade指的是层级之间的连锁操作。

延迟加载(Lazy Loading)

所谓延迟加载,就是在需要数据的时候,才真正执行数据加载操作。

"

lazy="true"

"

事务管理
Hibernate 是JDBC 的轻量级封装,本身并不具备事务管理能力。在事务管理层,
Hibernate将其委托给底层的JDBC或者JTA,以实现事务管理和调度功能。
Hibernate的默认事务处理机制基于JDBC Transaction。我们也可以通过配置文
件设定采用JTA作为事务管理实

锁(locking)
业务逻辑的实现过程中,往往需要保证数据访问的排他性

Hibernate支持两种锁机制:即通常所说的“悲观锁(Pessimistic Locking)”
和“乐观锁(Optimistic Locking)”。

悲观锁(Pessimistic Locking)
悲观锁,正如其名,它指的是对数据被外界(包括本系统当前的其他事务,以及来自
外部系统的事务处理)修改持保守态度,因此,在整个数据处理过程中,将数据处于锁定
状态。悲观锁的实现,往往依靠数据库提供的锁机制(也只有数据库层提供的锁机制才能
真正保证数据访问的排他性,否则,即使在本系统中实现了加锁机制,也无法保证外部系
统不会修改数据)。

乐观锁机制在一定程度上解决了这个问题。乐观锁,大多是基于数据版本
(Version)记录机制实现。何谓数据版本?即为数据增加一个版本标识,在基于
数据库表的版本解决方案中,一般是通过为数据库表增加一个“version”字段来
实现。
读取出数据时,将此版本号一同读出,之后更新时,对此版本号加一。此时,将提
交数据的版本数据与数据库表对应记录的当前版本信息进行比对,如果提交的数据
版本号大于数据库表当前版本号,则予以更新,否则认为是过期数据。

"

optimistic-lock="version"

"

Hibernate分页
数据分页显示,在系统实现中往往带来了较大的工作量,对于基于JDBC的程序而言,
不同数据库提供的分页(部分读取)模式往往各不相同,也带来了数据库间可移植性上的
问题。
Hibernate中,通过对不同数据库的统一接口设计,实现了透明化、通用化的分页实
现机制。

Cache管理
Cache往往是提高系统性能的最重要的手段。

Hibernate中的Cache大致分为两层,第一层Cache在Session实现,属于事务
级数据缓冲,一旦事务结束,这个Cache 也就失效。此层Cache 为内置实现,无需我们
2 DOS下的磁盘读写缓冲程序
Hibernate Developer’s Guide Version 1.0
September 2, 2004 So many open source projects. Why not Open your Documents?
进行干涉。
第二层Cache,是Hibernate 中对其实例范围内的数据进行缓存的管理容器。也是
这里我们讨论的主题。

Session管理

大多数情况下,Session 管理的目标聚焦于通过合理的设计,避免Session 的频繁创建
和销毁,从而避免大量的内存开销和频繁的JVM垃圾回收,保证系统高效平滑运行。
在各种Session 管理方案中, ThreadLocal 模式得到了大量使用。ThreadLocal 是
Java中一种较为特殊的线程绑定机制。通过ThreadLocal存取的数据,总是与当前线程相关,
也就是说,JVM 为每个运行的线程,绑定了私有的本地实例存取空间,从而为多线程环境常出
现的并发访问问题提供了一种隔离机制。

后边需要再消化。

Hibernate 学习的书-夏昕(3)相关推荐

  1. Hibernate学习总结【比较与Mybatis框架之间的区别】

    经过一周的Hibernate学习,我理解了作为以JPA为核心的持久层查询标准.JPA所涉及的思想为ORM(object relational mapping),它解释了为什么我们的实体关系要和数据库一 ...

  2. Android学习第一书

    大家好,我是一名Facebook的工程师,同时也是<第一行代码--Android>的忠实读者. 虽然我最近几年是在国外读书和工作的,但是和很多人一样,我也非常喜欢郭霖的博客以及他写的< ...

  3. 爆火的深度学习面试书现可白嫖!GitHub上线2周1.5K Star,之前售价146元

    金磊 发自 凹非寺 量子位 报道 | 公众号 QbitAI 面试宝典千千万,但这一份,应当是深度学习领域里不容错过的那一个了. 这不,才在arXiv"上架"12天,GitHub就狂 ...

  4. 基于TensorFlow 2.0的中文深度学习开源书来了!GitHub趋势日榜第一,斩获2K+星

    十三 发自 凹非寺  量子位 报道 | 公众号 QbitAI TensorFlow 2.0 发布已有一个半月之久,你会用了吗? 近日,一个叫做深度学习开源书的项目在火了.GitHub趋势日榜排名全球第 ...

  5. python入门视频教程推荐-python入门学习哪个书比较好(python视频教程知乎)

    自学python的学习路线是什么?推荐一些python学习资源 第一段 初级,掌握Python的语法和常用库的使用 这里首先推雪锋在网上的书籍,这是Python2.7的,这本书适合于重头开始一直读完, ...

  6. hibernate学习笔记二

    上一篇关于hibernate学习笔记一,主要是作为hibernate的入门知识.没有和spring发生任何关系,这一篇我将把spring集成进去,看spring如何管理hibernate,还有和未使用 ...

  7. hibernate学习和各种关系总结

    2019独角兽企业重金招聘Python工程师标准>>> 原文地址 http://yifanxiang.blog.163.com/blog/static/500008342010527 ...

  8. Hibernate学习之Hibernate注解总结

    Hibernate学习之Hibernate注解总结http://www.bieryun.com/3269.html 一.类级别的注解 @Entity name:表的名字(可选)一般表名和类名相同 必须 ...

  9. 中文深度学习入门书:小白易入,课程、实战项目全有 | 五位导师联合出品

    入门深度学习的最大阻碍是啥,课程资料太少.难度太大? 可能对于大部分中国AIer来说,语言门槛高过了一座大山.网红课虽好,但是英语听不懂啊. 鉴于大家都有这方面的困惑,今天就给大家推荐一本巨有影响力的 ...

  10. 自学python买什么书比较好-python入门学习哪个书比较好(python视频教程知乎)

    自学python的学习路线是什么?推荐一些python学习资源 第一段 初级,掌握Python的语法和常用库的使用 这里首先推雪锋在网上的书籍,这是Python2.7的,这本书适合于重头开始一直读完, ...

最新文章

  1. Python 如何查看内存地址
  2. scrum工具leangoo缺陷管理看板示例
  3. 反思沟通交流对象:与善人居 不明着懒 更不暗着懒
  4. [js高手之路] vue系列教程 - vue的事件绑定与方法(2)
  5. .NET Core 3.0 的新改进:针对分布式应用程序的故障诊断和监控
  6. ASCII,Unicode和UTF-8
  7. web服务器之iis,apache,tomcat三者之间的比较
  8. 2017职称英语和计算机考试,2017年职称英语考试取消了吗
  9. linux 用户态 内核态 通信,procfs(从0开始,内核态和用户态通信charpter2)
  10. SQL多条件查询拼接in中条件方法
  11. java表达式7|3,Chapter3 Java运算符
  12. 实战Python:利用Python和PyQt5实现瑞幸咖啡点餐系统
  13. 从斐波那契数列讲解算法设计的思路
  14. OTSU 获取最佳阈值,及opencv二值化
  15. 高数下学习笔记——思维导图
  16. 电子科技大学计算机学生水平,近三年的学生评价结果-电子科技大学.DOC
  17. ibm软件工程师含金量_.NET软件工程师最好取得哪些证书?(高分求高手)
  18. WiFi关联拒绝log分析以及代码流程 ASSOC_REJECT
  19. Scope参数错误或没有Scope权限
  20. lumen php版本,PHP微框架 Lumen 使用全纪录

热门文章

  1. php 批量打印word pdf,Office批量打印精灵教程--Word、PDF、Excel、PPT批量打印
  2. JAVA打印数组的四种方法
  3. 如何将KUX格式转换为MP4格式
  4. PayPal支付配置
  5. 群晖python导股票数据_群晖系统中运行python爬虫程序
  6. centos修改mysql数据库密码修改_centos7 mysql 修改数据库密码
  7. @JSONField的一些使用基础
  8. linux系统fsck.ext4,Ext4文件系统fsck后损坏修复过程一例
  9. 学习_011_Hive在大数据分析和大数据仓库中应用实战玩转大数据之Hive应用实战
  10. 华为查看mpls的命令_华为BGP基本命令