Hibernate框架(1)

1.Hibernate框架简述
Hibernate的核心组件
在基于MVC设计模式的JAVA WEB应用中,Hibernate可以作为模型层/数据访问层。它通过配置文件(hibernate.properties或hibernate.cfg.xml)和映射文件(***.hbm.xml)把JAVA对象或PO(Persistent Object,持久化对象)映射到数据库中的数据库,然后通过操作PO,对数据表中的数据进行增,删,改,查等操作。
除配置文件,映射文件和持久化类外,Hibernate的核心组件包括以下几部分:
a)Configuration类:用来读取Hibernate配置文件,并生成SessionFactory对象。
b)SessionFactory接口:产生Session实例工厂。
c)Session接口:用来操作PO。它有get(),load(),save(),update()和delete()等方法用来对PO进行加载,保存,更新及删除等操作。它是Hibernate的核心接口。
d)Query接口:用来对PO进行查询操。它可以从Session的createQuery()方法生成。
e)Transaction接口:用来管理Hibernate事务,它主要方法有commit()和rollback(),可以从Session的beginTrancation()方法生成。

Persistent Object
持久化对象可以是普通的Javabeans,惟一特殊的是它们与(仅一个)Session相关联。JavaBeans在Hibernate中存在三种状态:
1.临时状态(transient):当一个JavaBean对象在内存中孤立存在,不与数据库中的数据有任何关联关系时,那么这个JavaBeans对象就称为临时对象(Transient Object)。
2.持久化状态(persistent):当一个JavaBean对象与一个Session相关联时,就变成持久化对象(Persistent Object)
3.脱管状态(detached):在这个Session被关闭的同时,这个对象也会脱离持久化状态,就变成脱管状态(Detached Object),可以被应用程序的任何层自由使用,例如可以做与表示层打交道的数据舆对象(Data Transfer Object)。

Hibernate的运行过程
Hibernate的运行过程如下:
A:应用程序先调用Configration类,该类读取Hibernate的配置文件及映射文件中的信息,并用这些信息生成一个SessionFactpry对象。
B:然后从SessionFactory对象生成一个Session对象,并用Session对象生成Transaction对象;可通过Session对象的get(),load(),save(),update(),delete()和saveOrUpdate()等方法对PO进行加载,保存,更新,删除等操作;在查询的情况下,可通过Session对象生成一个Query对象,然后利用Query对象执行查询操作;如果没有异常,Transaction对象将 提交这些操作结果到数据库中。

Hibernate的运行过程如下图:在这里插入图片描述
补充:
ORMapping基本对应规则:
1:类跟表相对应
2:类的属性跟表的字段相对应
3:类的实例与表中具体的一条记录相对应
4:一个类可以对应多个表,一个表也可以对应对个类
5:DB中的表可以没有主键,但是Object中必须设置主键字段
6:DB中表与表之间的关系(如:外键)映射成为Object之间的关系
7:Object中属性的个数和名称可以和表中定义的字段个数和名称不一样
Hibernate中的对象
SessionFactory (org.hibernate.SessionFactory)
针对单个数据库映射关系经过编译后的内存镜像,是线程安全的(不可变)。 它是生成的工厂,本身要用到。
Session (org.hibernate.Session)
表示应用程序与持久储存层之间交互操作的一个单线程对象,此对象生存期很短,隐藏了连接,也是的工厂。
Transaction (org.hibernate.Transaction)
应用程序用来指定原子操作单元范围的对象,它是单线程的,生命周期很短。它通过抽象将应用从底层具体的、以及事务隔离开。
ConnectionProvider (org.hibernate.connection.ConnectionProvider)
生成连接的工厂(有连接池的作用)。它通过抽象将应用从底层的或隔离开。仅供开发者扩展/实现用,并不暴露给应用程序使用。
TransactionFactory (org.hibernate.TransactionFactory)
生成对象实例的工厂。仅供开发者扩展/实现用,并不暴露给应用程序使用。

主键生产策略:

1、increment:主键自动增长、由hibernate来管理

注意:如果数据库也设置了自动增长,就会发生主键冲突问题

2、identity:由底层数据库来管理生成,不由hibernate管理

也就是说底层数据库怎么设置的主键就怎么来

注意:mysql、sql server可以,oracle不可以

3、sequence:标识符生成器,就是底层数据库来管理生成,利用底层数据库提供的序列来生成标识符,不由hibernate管理

注意:mysql不支持序列 oracle支持

4、native:由底层数据库自己来决定使用什么策略,hibernate不管

注意:mysql自动选择identity、oracle自动选择sequence

5、uuid:随机生成32位不相同的字符串。

主键分自然主键和代理主键

1自然主键:也就是在业务中有具体意义的主键,

2代理主键,就是上面我们说的那5种,没有任何意义,只是标识主键是唯一的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/325809.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

通过 Transifex 中文化开源软件

如果您对于汉化软件充满热情, 我软已经发布了以下的开源产品在 Transifex 平台,让社区的小伙伴们参与翻译以及审核: 如何参与? – Transifex 的新手 登录 Transifex 如果您第一次使用 Transifex, 您可以新建立一个账号或是通过您的 GitHub, Google 或 LinkedIn 账号…

JavaScript操作DOM元素

一、DOM: Document Object Model(文档对象模型) 二、DOM的分类: 1.DOM Core(核心) 2.HTML-DOM 3.CSS-DOM 三、节点属性: 1.lastElementChild:最后一个节点 2.firstElementChild:第一个节点 3.ne…

hibernate的lazy的使用

引用:https://blog.csdn.net/Vincent_yuan1991/article/details/53482487 一: lazy,延迟加载 Lazy的有效期:只有在session打开的时候才有效;session关闭后lazy就没效了。 lazy策略可以用在: 标签上&#x…

React中路由组件与一般组件

四、路由组件与一般组件 1.写法不同&#xff1a;一般组件&#xff1a;<Demo/>路由组件&#xff1a;<Route path"/demo" component{Demo}/>2.存放位置不同&#xff1a;一般组件&#xff1a;components路由组件&#xff1a;pages3.接收到的props不同&#…

第六期.Net开源社群联合分享--除了情结和价格,Azure最适合什么场景?等你来讲趟坑的实战经验!

嘿嘿&#xff0c;大家好啊&#xff01;好荣幸啊这一期&#xff0c;能够咱们.NET开源社区一块来做这次线上分享会。 我就是各位小伙伴可爱而且博学而且低调而且人见人爱花见花开而且谦虚但是经常口不择言的主持人老板娘Grace。 这次有新朋友&#xff0c;有老朋友&#xff0c;有…

jQuery选择器整理

第六章jQuery选择器一、jQuery选择器的分类&#xff1a; 1.基本选择器 2.层次选择器 3.属性选择器 4.基本过滤选择器 5.可见性过滤选择器 二、jQuery的基本选择器&#xff1a; ///基本选择器 //id选择器 //$("#div1").css(“background”,“red”); //class选择器 /…

遍历HashMap的四种方法

在Map集合中 values():方法是获取集合中的所有的值----没有键&#xff0c;没有对应关系&#xff0c; KeySet(): 将Map中所有的键存入到set集合中。因为set具备迭代器。所有可以迭代方式取出所有的键&#xff0c;再根据get方法。获取每一个键对应的值。 keySet():迭代后只能通…

支付系统的防重设计

转载自 支付系统的防重设计 导读 “目前在互联网应用的大部分支付场景中&#xff0c;对接支付宝、微信移动支付产品这样需要用户参与支付流程的支付方式已经变得非常普遍&#xff0c;类似的还有PC端银行网银支付&#xff1b;而通过绑定用户银行卡、对接银行卡快捷支付通道直接…

React中antd的按需引入+自定主题

antd的按需引入自定主题 1.安装依赖&#xff1a;yarn add react-app-rewired customize-cra babel-plugin-import less less-loader2.修改package.json...."scripts": {"start": "react-app-rewired start","build": "react-app-…

Windows Server Containers 支持 Windows 开发者使用 Docker

在过去几年里&#xff0c;Docker 和容器已成为全球开发界和企业最热门的话题之一。去年秋天发布的 Windows Server 2016 支持 Windows 开发者使用容器&#xff0c;使得这一热门话题再次升温。Windows 和 Docker 是如何走到一起的&#xff1f; 一切始于 2014 年隆重举办的普吉特…

漫画:什么是二叉堆?(修正版)

转载自 漫画&#xff1a;什么是二叉堆&#xff1f;&#xff08;修正版&#xff09; 什么是二叉堆&#xff1f; 二叉堆本质上是一种完全二叉树&#xff0c;它分为两个类型&#xff1a; 1.最大堆 2.最小堆 什么是最大堆呢&#xff1f;最大堆任何一个父节点的值&#xff0c;都…

React路由组件传递参数

向路由组件传递参数 1.params参数路由链接(携带参数)&#xff1a;<Link to/demo/test/tom/18}>详情</Link>注册路由(声明接收)&#xff1a;<Route path"/demo/test/:name/:age" component{Test}/>接收参数&#xff1a;this.props.match.params2.se…

jQuery选择器案例之——index.js

$(function(){//alert(a);///基本选择器//id选择器//$("#div1").css("background","red");//class选择器//$(".p1").css("color","red");//标签选择器//$("p").css("color","red")…

漫画:什么是堆排序

转载自 漫画&#xff1a;什么是堆排序 在上一篇漫画中&#xff0c;小灰介绍了 二叉堆 这样一种强大的数据结构&#xff1a; 漫画&#xff1a;什么是二叉堆&#xff1f;&#xff08;修正版&#xff09; 那么&#xff0c;这个二叉堆怎样来使用呢&#xff1f;我们这一期将会详…

监控——《微服务设计》读书笔记

在单块应用的世界里&#xff0c;当我们遇到问题时&#xff0c;我们至少清楚从哪里开始调查。网站访问速度&#xff1f;网站访问异常&#xff1f;CPU占用过高&#xff1f;这些都是单块应用程序的问题&#xff0c;单一的故障点会极大地简化对问题的排查。 而现在我们面对了多个微…

React中的模糊匹配与精准匹配

路由的严格匹配与模糊匹配 1.默认使用的是模糊匹配&#xff08;简单记&#xff1a;【输入的路径】必须包含要【匹配的路径】&#xff0c;且顺序要一致&#xff09;2.开启严格匹配&#xff1a;<Route exact{true} path"/about" component{About}/>3.严格匹配不要…

jQuery中的事件与动画

一、jQuery中的事件&#xff1a; 1.基础事件 &#xff08;1&#xff09;鼠标事件 &#xff08;2&#xff09;键盘事件 &#xff08;3&#xff09;window事件 2.复合事件 &#xff08;1&#xff09;鼠标光标悬停 &#xff08;2&#xff09;鼠标连续点击 二、鼠标事件&#xff1a…

什么是 TCC分布式事务

转载自 什么是 TCC分布式事务 近两年微服务变得越来越火热&#xff0c;各种框架与组件的出现&#xff0c;更是为微服务的开发提供了便利。 我们都知道&#xff0c;每个微服务都是一个对应的小服务&#xff0c;多个服务之间可以方便的进行功能的组合&#xff0c;来形成功能更…

.NET跨平台实践:再谈用C#开发Linux守护进程 — 完整篇

Linux守护进程是Linux的后台服务进程&#xff0c;相当于Windows服务&#xff0c;对于为Linux开发服务程序的朋友来说&#xff0c;Linux守护进程相关技术是必不可少的&#xff0c;因为这个技术不仅仅是为了开发守护进程&#xff0c;还可以拓展到多进程&#xff0c;父子进程文件描…