有专门做ppt的网站/如何免费推广一个网站
当你在实战项目中需要用到SSH时, 如果你之前只用过Mybatis那自然是不能解决问题的, 因为在很多银行类金融类项目中你可能会使用到Hibernate, 那么关于Hibernate你应该要了解什么呢, 本篇文章就以学习Hibernate框架为目的, 巩固在工作中可能需要用到的这种ORM技术, 同时也欢迎家人们探讨交流和指正。
概述
Hibernate是一种Java语言下的对象关系映射(ORM)解决方案。它为面向对象的领域模型到传统的关系型数据库的映射, 提供了使用方便的持久化框架。
它的设计目标是将软件开发人员从大量相同的数据持久层相关编程工作中解放出来。无论是从设计草案还是从一个遗留数据库开始, 开发人员都可以采用Hibernate。
Hibernate不仅负责从Java类到数据库表的映射(还包括从Java数据类型到SQL数据类型的映射), 还提供了面向对象的数据查询检索机制, 从而极大地缩短了手动处理SQL和JDBC上的开发时间。
前面已经提到了Hibernate是一种Java语言下的ORM解决方案, 所以我们要对ORM有一定了解, 再往前走就是JDBC, 所以我们就要先理解JDBC, 那么JDBC是什么呢?
什么是JDBC?
JDBC代表Java Database Connectivity, 它是提供了一组Java API来访问关系型数据的Java程序, 这些Java API可以使Java程序执行SQL语句, 能够与任何符合规范的SQL数据库进行交互。JDBC提供了一个灵活的框架来编写操作数据库的独立的应用程序, 该应用程序能够运行在不同的平台上且不需要修改, 能够与不同的DBMS进行交互。
JDBC的优点和缺点
JDBC的优点 | JDBC的缺点 |
干净整洁的SQL处理 | 大项目中使用很复杂 |
大数据下有良好的性能 | 很大的编程成本 |
对于小应用非常好 | 没有封装 |
易学的简易语法 | 难以实现MVC的概念 |
查询需要指定DBMS |
为什么是ORM(对象关系映射)?
当我们工作在一个面向对象的系统中时, 存在一个对象模型和关系数据库不匹配的问题。
RDMS用表格的形式存储数据, 然而像Java或者C#这样的面向对象的语言他表示一个对象关联图。考虑下面的带有构造方法和公有方法的Java类:
public class Employee{private int id;private String first_name;private String last_name;private int salary;public Employee(){}public Employee(String fname, String lname, int salary){this.first_name = fname;this.last_name = lname;this.salary = salary;}public int getId(){return id;}public String getFirstName(){return first_name;}public String getLastName(){return last_name;}public int getSalary(){return salary;}
}
现考虑以上的对象需要被存储和索引进下面的RDBMS表格中:
create table EMPLOYEE(id INT NOT NULL auto_increment,first_name VARCHAR(20) default
NULL,last_name VARCHAR(20) default
NULL,salary int default NULL,PRIMARY KEY(id)
);
第一个问题, 如果我们开发了几页代码或应用程序后, 需要修改数据库的设计怎么办?
第二个问题, 再关系型数据库中加载和存储对象时我们要面临一下5个不匹配的问题。
不匹配 | 描述 |
粒度 | 有时你会有一个对象模型, 该模型类的数量比数据库中关联的表的数量更多 |
继承 | RDBMS不会定义任何在面向对象编程语言中本来就有的继承 |
身份 | RDBMS明确定义一个'sameness'的概念: 主键。然而, Java同时定义了对象判等(a==b)和对象值判等(a.equals(b)) |
关联 | 面向对象的编程语言使用对象引用来表示关联, 而一个RDBMS使用外键来表示对象关联 |
导航 | 在Java中和在RDBMS中访问对象的方式完全不相同 |
ORM(Object-Relational Mapping)是以上所有不匹配问题的解决方案。
什么是ORM?
ORM表示Object-Relational Mapping, 是一个方便在关系型数据库和类似于Java, C#等面向对象的编程语言中转换数据的技术。一个ORM系统相比于普通的JDBC有以下的优点:
使用业务代码访问对象而不是数据库中的表
从面向对象逻辑中隐藏SQL查询的细节
基于JDBC的'under the hood'
没有必要去处理数据库实现
实体是基于业务的概念而不是数据库的结构
事务管理和键的自动生成
应用程序的快速开发
一个ORM解决方案由以下四个实体组成:
一个API来在持久类的对象上实现基本的CRUD操作
一个语言或API来指定引用类和属性的查询
一个可配置的服务用来指定映射元数据
一个技术和事务对象交互来执行dirty checking, lazy association fetching和其他优化的功能
Java ORM框架
在Java中有几个持久化的框架和ORM选项。一个持久化的框架是ORM存储和索引对象到关系型数据库的服务。
Enterprise JavaBeans Entity Beans
Java Data Objects
Castor
TopLink
Spring DAO
Hibernate
And many more
Hibernate简介
Hibernate是由Gavin King于2001年创建的开放源代码的对象关系型框架。它强大且高效的构建具有关系对象持久性和查询服务的Java应用程序。
Hibernate将Java类映射到SQL数据类型中, 并把开发人员从95%的公共数据持久性编程工作中解放出来。
Hibernate是传统Java对象和数据库服务器之间的桥梁, 用来处理基于O/M映射机制和模式的那些对象。

Hibernate优势
Hibernate使用XML文件来处理映射Java类别到数据库表格中, 并且不用编写任何代码。
为在数据库中直接储存和检索Java对象提供简单的API。
如果在数据库中或任何其他表格中出现变化, 那么仅需要改变XML文件属性。
抽象不熟悉的SQL类型, 并为我们提供工作中所熟悉的Java对象。
Hibernate不需要应用程序服务器来操作。
操控你数据库中对象复杂的关联。
最小化与访问数据库的智能提取策略。
提供简单的数据询问。
支持的数据库
Hibernate支持几乎所有的主要RDBMS。以下是一些由Hibernate所支持的数据库引擎:
HSQL Database Engine
DB2/NT
MySQL
PostgreSQL
FrontBase
Oracle
Microsoft SQL Server Database
Sybase SQL Server
Informix Dynamic Server
支持的技术
XDoclet Spring
J2EE
Eclipse plug-ins
Maven
Hibernate架构
架构
Hibernate架构是分层的, 作为数据访问层, 你不必知道底层API。Hibernate利用数据库以及配置数据来为应用程序提供持续性服务
下面是一个非常高水平的Hibernate应用程序架构视图:

下面是一个详细的Hibernate应用程序体系结构视图以及一些重要的类:

Hibernate使用不同的现存Java API, 比如JDBC, Java事务API(JTA), 以及Java命名和目录界面(JNDI)。JDBC提供了一个基本的抽象级别的通用关系型数据库的功能, Hibernate支持几乎所有带有JDBC驱动的数据库。JNDI和JTA允许Hibernate与J2EE应用程序服务器相集成。
下面的部分简要地描述了在Hibernate应用程序架构所涉及地每一个类对象。
配置对象
篇日志对象是你在任何Hibernate应用程序中创造的第一个Hibernate对象, 并且经常只在应用程序初始化期间创造。它代表了Hibernate所需一个配置或属性文件。配置对象提供了两种基础组件。
数据库连接: 由Hibernate支持的一个或多个配置文件处理, 这些文件是hibernate.properties和hibernate.cfg.xml。
类映射设置: 这个组件创造了Java类和数据库表格之间的联系。
SessionFactory对象
配置对象被用于创造一个 SessionFactory 对象,使用提供的配置文件为应用程序依次配置 Hibernate,并允许实例化一个会话对象。SessionFactory 是一个线程安全对象并由应用程序所有的线程所使用。
SessionFactory 是一个重量级对象所以通常它都是在应用程序启动时创造然后留存为以后使用。每个数据库需要一个 SessionFactory 对象使用一个单独的配置文件。所以如果你使用多种数据库那么你要创造多种 SessionFactory 对象。
Session对象
一个会话被用于与数据库的物理连接。Session 对象是轻量级的,并被设计为每次实例化都需要与数据库的交互。持久对象通过 Session 对象保存和检索。
Session 对象不应该长时间保持开启状态因为它们通常情况下并非线程安全,并且它们应该按照所需创造和销毁。
Transaction对象
一个事务代表了与数据库工作的一个单元并且大部分 RDBMS 支持事务功能。在 Hibernate 中事务由底层事务管理器和事务(来自 JDBC 或者 JTA)处理。
这是一个选择性对象,Hibernate 应用程序可能不选择使用这个接口,而是在自己应用程序代码中管理事务。
Query对象
Query 对象使用 SQL 或者 Hibernate 查询语言(HQL)字符串在数据库中来检索数据并创造对象。一个查询的实例被用于连结查询参数,限制由查询返回的结果数量,并最终执行查询。
Criteria对象
Criteria 对象被用于创造和执行面向规则查询的对象来检索对象。
Hibernate环境
为了给Hibernate应用准备需要地开发环境, 该怎样安装Hibernate应用和一些其他相关的包。这里会用MySQL数据库来对一些Hibernate应用的例子进行试验。
下载Hibernate
首先要在想要把Hibernate应用安装在Windows系统或是Unix系统这两者之间做出选择, 之后进行到下一步骤去下载与Windows系统对应的.zip文件或是与Unix系统对应的.tz文件。
之后到http://www.hibernate.org/downloads这个网址来下载最新版本的Hibernate应用。
这里下载的是hibernate-distribution-3.6.4.Final这个版本的应用, 在这个版本的应用下当我们解压下载的文件时会显示以下的目录结构:

安装Hibernate
一旦你下载好并解压了Hibernate应用最新版本的安装文件, 你需要执行以下两个简单的步骤。
一定要确保你把你的CLASSPATH变量设置合理, 否则当你编译你的应用时可能会遇到问题。
首先把从/lib复制来的所有库文件拷贝到CLASSPATH里, 并且改变你的CLASSPATH变量来涵盖所有的JAR。
最后复制hibernate3.jar这个文件到CLASSPATH里。这个文件位于安装文件的根目录里, 它是Hibernate应用针对的主要JAR。
Hibernate的前提
以下是一个Hibernate应用需要的有关包/库的表格, 在安装Hibernate应用之前你需要先安装它们, 为了安装这些包你必须把来自/lib的库文件拷贝到CLASSPATH, 并按以下说明相应地改变CLASSPATH变量。
S.N. | 包/库 |
1 | dom4j - XML 解析 www.dom4j.org/ |
2 | Xalan - XSLT 处理器 http://xml.apache.org/xalan-j/ |
3 | Xerces - The Xerces Java 解析器 http://xml.apache.org/xerces-j/ |
4 | cglib -Java 类生成库 http://cglib.sourceforge.net/ |
5 | log4j - 日志控制 http://logging.apache.org/log4j |
6 | Commons - 日志,邮件等 http://jakarta.apache.org/commons |
7 | SLF4J - 简单日志门面 http://www.slf4j.org |
Hibernate配置
配置
Hibernate 需要事先知道在哪里找到映射信息,这些映射信息定义了 Java 类怎样关联到数据库表。Hibernate 也需要一套相关数据库和其它相关参数的配置设置。所有这些信息通常是作为一个标准的 Java 属性文件提供的,名叫 hibernate.properties。又或者是作为 XML 文件提供的,名叫 hibernate.cfg.xml。
我们将考虑 hibernate.cfg.xml 这个 XML 格式文件,来决定在我的例子里指定需要的 Hibernate 应用属性。这个 XML 文件中大多数的属性是不需要修改的。这个文件保存在应用程序的类路径的根目录里。
Hibernate属性
下面是一个重要的属性列表, 你可能需要表中的属性来在单独的情况下配置数据库。
S.N. | 属性和描述 |
1 | hibernate.dialect 这个属性使 Hibernate 应用为被选择的数据库生成适当的 SQL。 |
2 | hibernate.connection.driver_class JDBC 驱动程序类。 |
3 | hibernate.connection.url 数据库实例的 JDBC URL。 |
4 | hibernate.connection.username 数据库用户名。 |
5 | hibernate.connection.password 数据库密码。 |
6 | hibernate.connection.pool_size 限制在 Hibernate 应用数据库连接池中连接的数量。 |
7 | hibernate.connection.autocommit 允许在 JDBC 连接中使用自动提交模式。 |
如果您正在使用JNDI和数据库应用程序服务器然后您必须配置以下属性:
S.N. | 属性和描述 |
1 | hibernate.connection.datasource 在应用程序服务器环境中您正在使用的应用程序 JNDI 名。 |
2 | hibernate.jndi.class JNDI 的 InitialContext 类。 |
3 | hibernate.jndi.<JNDIpropertyname> 在 JNDI的 InitialContext 类中通过任何你想要的 Java 命名和目录接口属性。 |
4 | hibernate.jndi.url 为 JNDI 提供 URL。 |
5 | hibernate.connection.username 数据库用户名。 |
6 | hibernate.connection.password 数据库密码。 |
Hibernate和MySQL数据库
MySQL数据库是目前可用的开源数据库系统中最受欢迎的数据库之一。
我们要创建hibernate.cfg.xml配置文件并将其放置在应用程序的CLASSPATH的根目录里。你要确保在你的MySQL数据库中testdb数据库是可用的, 而且你要有一个用户test可用来访问数据库。
XML配置文件一定要遵守Hibernate 3 Configuration DTD, 在 http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd这个网址中是可以找到的。
相关文章:

说说Hibernate
当你在实战项目中需要用到SSH时, 如果你之前只用过Mybatis那自然是不能解决问题的, 因为在很多银行类金融类项目中你可能会使用到Hibernate, 那么关于Hibernate你应该要了解什么呢, 本篇文章就以学习Hibernate框架为目的, 巩固在工作中可能需要用到的这种ORM技术, 同时也欢迎家…...

目标检测论文阅读:DETR算法笔记
标题:End-to-End Object Detection with Transformers 会议:ECCV2020 论文地址:https://link.springer.com/10.1007/978-3-030-58452-8_13 官方代码:https://github.com/facebookresearch/detr 作者单位:巴黎第九大学、…...

Golang sync.Once 源码浅析
本文分析了Golang sync.Once 源码,并由此引申,简单讨论了单例模式的实现、 atomic 包的作用和 Java volatile 的使用。 sync.Once 使用例子 sync.Once 用于保证一个函数只被调用一次。它可以用于实现单例模式。 有如下类型: type instanc…...

C++面向对象(上)
文章目录前言1.面向过程和面向对象初步认识2.引入类的概念1.概念与用法2.类的访问限定符及封装3.类的作用域和实例化4.类的大小计算5.this指针3.总结前言 本文将对C面向对象进行初步介绍,引入类和对象的概念。围绕类和对象介绍一些基础知识,为以后深入学…...

经常用但是不知道什么是BFC?
BFC学习 block formatting context 块级格式上下文 简单理解: 一个独立容器,内部布局不会受到外面的影响 形成条件: 1.浮动元素:float除none之外的值 2.绝对定位:position:absolute,fixed 3.display:inline-blo…...

GO的临时对象池sync.Pool
GO的临时对象池sync.Pool 文章目录GO的临时对象池sync.Pool一、临时对象池:sync.Pool1.1 临时对象的特点1.2 临时对象池的用途1.3 sync.Pool 的用法二、临时对象池中的值会被及时清理掉2.1 池清理函数2.2 池汇总列表2.3 临时对象池存储值所用的数据结构2.4 临时对象…...

高精度算法一
目录 1. 基础知识 2. 大整数 大整数 3. 大整数 - 大整数 1. 基础知识 利用计算机进行数值计算,有时会遇到这样的问题:有些计算要求精度高,希望计算的数的位数可达几十位甚至几百位,虽然计算机的计算精度也算较高了,…...

2023年全国最新食品安全管理员精选真题及答案1
百分百题库提供食品安全管理员考试试题、食品安全员考试预测题、食品安全管理员考试真题、食品安全员证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。 11.预包装食品的标签内容应使用规范的汉字,但可以同时使用&a…...

C++入门:引用
目录 一. 什么是引用 1.1 引用的概念 1.2 引用的定义 二. 引用的性质和用途 2.1 引用的三大主要性质 2.2 引用的主要应用 三. 引用的效率测试 3.1 传值调用和传引用调用的效率对比 3.2 值返回和引用返回的效率对比 四. 常引用 4.1 权限放大和权限缩小问题 4.2 跨…...

SpringSecurity的权限校验详解说明(附完整代码)
说明 SpringSecurity的权限校是基于SpringSecurity的安全认证的详解说明(附完整代码) (https://blog.csdn.net/qq_51076413/article/details/129102660)的讲解,如果不了解SpringSecurity是怎么认证,请先看下【SpringSecurity的安…...

Java-集合(5)
Map接口 JDK8 Map接口实现子类的特点 Map和Collection是并列关系,Map用于保存具有映射关系的数据:Key-ValueMap中的key和value可以是任何引用类型的数据,会封装到HashMap$Node对象中Map中的key不允许重复,原因和HashSet一样Map…...

研制过程评审活动(四)设计定型阶段
1、设计定型阶段主要任务 设计定型的主要任务是对武器装备性能和使用要求进行全面考核,以确认产品是否达到《研制任务书》和《研制合同》的要求。 设计定型阶段应最终确定《产品规范》、《工艺规范》和《材料规范》的正式版本,并形成正式的全套生产图样、有关技术文件及目…...

【Linux】进程替换
文章目录进程程序替换替换原理替换函数函数返回值函数命名理解在makefile文件中一次生成两个可执行文件总结:程序替换时运行其它语言程序进程程序替换 程序要运行要先加载到内存当中 , 如何做到? 加载器加载进来,然后程序替换 为什么? ->冯诺依曼 因为CPU读取数据的时候只…...

LeetCode171-Excel表列序号(进制转换问题)
LeetCode171-Excel表列序号1、问题描述2、解题思路:进制转换3、代码实现1、问题描述 给你一个字符串columnTitle,表示Excel表格中得列名称。返回该列名称对应得列序号。 例如: A -> 1 B -> 2 C -> 3 ... Z -> 26 AA -> 27 AB -> 28 …...

React SSR
ReactDOMServer 参考链接:https://zh-hans.reactjs.org/docs/react-dom-server.html ReactDOMServer 对象允许你将组件渲染成静态标记。通常,它被使用在 Node 服务端上 // ES modules import * as ReactDOMServer from react-dom/server; // CommonJS v…...

如何系统地优化页面性能
页面优化,其实就是要让页面更快地显示和响应。由于一个页面在它不同的阶段,所侧重的关注点是不一样的,所以如果要讨论页面优化,就要分析一个页面生存周期的不同阶段。 通常一个页面有三个阶段:加载阶段、交互阶段和关…...

Vulnhub 渗透练习(八)—— THE ETHER: EVILSCIENCE
环境搭建 环境下载 靶机和攻击机网络适配都选 NAT 即可。 信息收集 主机扫描 两个端口,22 和 80,且 apache httpd 2.4.0~2.4.29 存在换行解析漏洞。 Apache HTTPD是一款HTTP服务器,它可以通过mod_php来运行PHP网页。其2.4.0~2.4.29版本中…...

华为OD机试题 - 水仙花数 2(JavaScript)| 代码+思路+重要知识点
最近更新的博客 华为OD机试题 - 字符串加密(JavaScript) 华为OD机试题 - 字母消消乐(JavaScript) 华为OD机试题 - 字母计数(JavaScript) 华为OD机试题 - 整数分解(JavaScript) 华为OD机试题 - 单词反转(JavaScript) 使用说明 参加华为od机试,一定要注意不要完全背…...

字符设备驱动基础(二)
目录 一、五种IO模型------读写外设数据的方式 二、阻塞与非阻塞 三、多路复用 3.1 应用层:三套接口select、poll、epoll 3.2 驱动层:实现poll函数 四、信号驱动 4.1 应用层:信号注册fcntl 4.2 驱动层:实现fasync函数 一、…...

看见统计——第三章 概率分布
看见统计——第三章 概率分布 参考 https://github.com/seeingtheory/Seeing-Theory中心极限定理 概率分布描述了随机变量取值的规律。 随机变量Random Variables 🔥 定义:将样本空间中的结果映射到实数的函数 XXX 称为随机变量(random variable)&a…...

【基于众包标注的语文教材句子难易度评估研究 论文精读】
基于众包标注的语文教材句子难易度评估研究 论文精读信息摘 要0 引言1 相关研究2 众包标注方法3 语料库构建3.1 数据收集3.1 基于五点量表的专家标注3.3 基于成对比较的众包标注4 特征及模型4.1 特征抽取4.2 模型与实验设计4.2.1 任务一:单句绝对难度评估4.2.2 任务二:句对相对…...

实例五:MATLAB APP design-APP登录界面的设计
一、APP 界面设计展示 注:在账号和密码提示框输入相应的账号和密码后,点击登录按钮,即可跳转到程序中设计的工作界面。 二、APP设计界面运行结果展示...

作用域和闭包:
1、LHS和RHS查询编译一段代码,需要js引擎和编译器(js引擎负责整个程序运行时所需的各种资源的调度,编译器只是js引擎的一部分,负责将JavaScript源码编译成机器能识别的机器指令,然后交给引擎运行)编译的过程…...

Vue常见面试题?
1、说说你对SPA单页面的理解,它的优缺点是什么? SPA(single-page application)仅在Web页面初始化时加载相应的HTML、JavaScript和CSS。一旦页面加载完成,SPA不会因为用户的操作而进行页面的重新加载或跳转;取而代之的是利用路由机…...

前端借助Canvas实现压缩图片两种方法
一、具体代码 1、利用canvas压缩图片方法一 // 第一种压缩图片方法(图片base64,图片类型,压缩比例,回调函数)// 图片类型是指 image/png、image/jpeg、image/webp(仅Chrome支持)// 该方法对以上三种图片类型都适用 压缩结果的图片base64与原类型相同// …...

2023年美赛C题Wordle预测问题二建模及Python代码详细讲解
更新时间:2023-2-19 相关链接 (1)2023年美赛C题Wordle预测问题一建模及Python代码详细讲解 (2)2023年美赛C题Wordle预测问题二建模及Python代码详细讲解 (3)2023年美赛C题Wordle预测问题三、四…...

【算法】双指针
作者:指针不指南吗 专栏:算法篇 🐾或许会很慢,但是不可以停下来🐾 文章目录1.双指针分类2.双指针思想3.双指针应用1.双指针分类 常见问题分类 (1) 对于一个序列,用两个指针维护一段区间, 比如快速排序。 …...

Flutter-Widget-学习笔记
Widget 是整个视图描述的基础。 参考:https://docs.flutter.dev/resources/architectural-overview Widget 到底是什么呢? Widget 是 Flutter 功能的抽象描述,是视图的配置信息,同样也是数据的映射,是 Flutter 开发框…...

easyExcel 写复杂表头
写模板 模板图片: 实体类(这里没有用Data 是因为Lombok和easyExcal的版本冲突,在导入读取的时候获取不到值) package cn.iocoder.yudao.module.project.controller.admin.goods.vo;import com.alibaba.excel.annotation.ExcelI…...

关于线程池的执行流程和拒绝策略
使用线程池的好处为: 降低资源消耗:减少线程的创建和销毁带来的性能开销。 提高响应速度:当任务来时可以直接使用,不用等待线程创建 可管理性: 进行统一的分配,监控,避免大量的线程间因互相抢…...