hibernate原理
Hibernate是一个开放源代码的对象关系映射框架。
Hibernate对JDBC进行了非常轻量级的对象封装,它将POJO(Plain Ordinary Java Object:简单的java对象,实际就是普通JavaBean)与数据库表建立映射关系,是一个全自动的orm(Object Relational Mapping:对象关系映射)框架,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。这样就不需要和复杂的sql打交道,只要像操作对象一样的操作它就可以了(把关系数据库的字段在内存中映射成对象的属性)。
Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。
ORM工具简化了数据创建,数据处理和数据访问。它是将对象映射到数据库中存储的数据(表)的编程技术。
hibernate工作原理:
1、调用Configuration类,通过Configuration config = new Configuration().configure();读取并解析hibernate.cfg.xml配置文件
2、通过hibernate.cfg.xml中的<mapping resource="com/xxx/Xxx.hbm.xml"/>读取并解析映射信息
3、通过SessionFactory sessionfactory = config.buildSessionFactory();通过读取的这些配置信息创建一个sessionfactory对象
4、Session session = sessionfactory.openSession();通过sessionfactory生成一个Sesssion对象
5、Transaction ts = session.beginTransaction();通过session对象创建并启动事务Transation
6、通过Session对象的get()、sava()、update()、delete()和saveOrupdate()等方法对PO进行加载,保存,更新,删除等操作;
7、在查询的情况下,可通过Session对象生成一个Query对象,然后利用Query对象执行查询操作。如果没有异常,Transaction对象将提交这些操作结果到数据库中,否则会回滚事务。
Hibernate是如何连接数据库?
主要是通过hibernate.cfg.xml配置文件中的配置。在这个文件中定义了数据库进行连接所需要的信息,包括JDBC驱动、用户名、密码、数据库方言等,configuration类借助dom4j的XML解析器解析设置环境,然后使用这些环境属性来生成 SessionFactory。这样这个sessionFactory生成的session就能成功获得数据库的连接。
hibernate.cfg.xml
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!-- 连接数据库的基本配置 --> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.url">jdbc:mysql:///student?characterEncoding=utf-8</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">root</property> <!-- 配置方言 --> <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property> <!-- 显示sql语句 --> <property name="hibernate.show_sql">true</property> <!-- 格式化显示SQL --> <property name="format_sql">true</property> <!-- 告诉主配置文件,在加载该配置文件的时候,加载对应的映射文件 --> <mapping resource="org/danni/model/entity/Admin.hbm.xml" /> <mapping resource="org/danni/model/entity/Department.hbm.xml" /> <mapping resource="org/danni/model/entity/Employee.hbm.xml" /> </session-factory> </hibernate-configuration>
Hibernate框架有很多优点:
1、开源和轻量级: Hibernate框架是根据LGPL许可证和轻量级的开源工具。
2、快速性能: Hibernate框架的性能很快,因为缓存在Hibernate框架内部使用。 hibernate框架中有两种类型的缓存:一级缓存和二级缓存。一级缓存默认是启用的。
3、数据库独立查询: HQL(Hibernate查询语言)是面向对象的SQL版本。 它生成数据库独立查询。 所以你不需要编写数据库特定的查询语句。 在Hibernate之前,如果项目更改了数据库,我们需要更改SQL查询,从而导致维护变得非常复杂。
4、自动创建表: Hibernate框架提供了自动创建数据库表的功能。 因此,无需手动在数据库中创建表。
5、简化复杂连接: 在hibernate框架中可轻松获取多个表中的数据。
6、提供查询统计和数据库状态: Hibernate支持查询缓存,并提供有关查询和数据库状态的统计信息。
hibernate核心接口
session:负责对持久化对象CRUD操作
sessionFactory:负责初始化hibernate,创建session对象
configuration:负责配置并启动hibernate,创建SessionFactory
Transaction:负责事物相关的操作
Query和Criteria接口:负责执行各种数据库查询
1、会话工厂(SessionFactory接口)
SessionFactory是ConnectionProvider的会话和客户端工厂。 它拥有数据的二级缓存(可选)。SessionFactroy接口负责初始化Hibernate。它充当数据存储源的代理,org.hibernate.SessionFactory接口提供了工厂方法来获取Session的对象。
需要注意的是SessionFactory并不是轻量级的,因为一般情况下,一个项目通常只需要一个SessionFactory就够,当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory。
2、会话(Session)
Session对象提供应用程序和存储在数据库中的数据之间的接口。 它是一个短生命周期的对象并包装JDBC连接。 它是事务,查询和标准的工厂。 它拥有一级缓存(强制性)数据。 org.hibernate.Session接口提供插入,更新和删除对象的方法。 它还提供了事务,查询和标准的工厂方法。
3、事务(Transaction接口)
Transaction接口负责事务相关的操作,一般在Hibernate的增删改中出现, org.hibernate.Transaction接口提供事务管理的方法。但是使用Hibernate的人一般使用Spring去管理事务。
4、连接提供者(ConnectionProvider)
它是一个JDBC连接工厂。 它从DriverManager或DataSource抽象出来的应用程序。 它是一个可选项。
5、Configuration接口:
Configuration对象用于配置并根启动Hibernate。Hibernate应用通过Configuration实例来指定对象—关系映射文件的位置或者动态配置Hibernate的属性,然后创建SessionFactory实例。
我们可以查看Configuration的源代码,它的configure()方法是这样实现的:
public Configuration configure() throwsHibernateException { configure("/hibernate.cfg.xml" );//此处指定了ORM文件的位置 return this; }
---------------------
原文:https://blog.csdn.net/qq_36748278/article/details/78024826
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)