深入浅出理解 hibernate

it2026-09-23  16

文章目录

前言一、hibernate是什么?1.1 ORM 框架1.2 解决问题1.3 hibernate 执行流程1.4 核心接口 二、使用步骤1.引入库2.读入数据 总结


前言

本文主要介绍hebernate的原理以及一些简单的增删查改


一、hibernate是什么?

1.1 ORM 框架

ORM 就是利用描述对象和关系型数据库之间的映射信息,自动将 Java 应用程序中的对象持久化到关系型数据库的表中。通过操作 Java 对象,就可以完成对数据库表的操作。可以把 ORM 理解为关系型数据和对象之间的一个纽带,开发人员只需要关注纽带一端映射的对象即可

1.2 解决问题

使用传统的 JDBC 开发小型应用系统,并不会有什么麻烦,但是对于大型应用系统的开发,使用 JDBC 就会显得力不从心。

例如对几十、几百张包含几十个字段的表进行插入操作时,编写的 SQL 语句不但很长,而且繁琐,容易出错;在读取数据时,需要编写多条语句从结果集中取出各个字段的信息,工作量非常大。

为了提高数据访问层的编程效率,Gavin King 开发了一个当今最流行的 ORM(即 Object-Relational Mapping 对象关系映射)框架—— Hibernate 框架

1.3 hibernate 执行流程

1)创建 Configuration 实例,加载 Hibernate 核心配置文件和映射文件信息到 Configuration 对象中。 2)创建 SessionFactory 实例。通过 Configuration 对象读取到的配置文件信息创建 SessionFactory 对象,该对象中保存了当前数据库的配置信息和所有映射关系等信息。 3)创建 Session 实例,建立数据库连接。Session 主要负责执行持久化对象的增、删、改、查操作,创建一个 Session 就相当于创建一个新的数据库连接。 4)创建 Transaction 实例,开启一个事务。Transaction 用于事务管理,一个 Transaction 对象对应的事务可以包含多个操作。在使用 Hibernate 进行增、删、改操作时,必须先创建 Transaction 对象。需要注意的是,Hibernate 的事务默认是关闭的,需要手动开启事务和关闭事务。 5)利用 Session 接口通过的各种方法进行持久化操作。 6)提交事务,对实体对象持久化操作后,必须提交事务。 7)关闭 Session 与 SessionFactory,断开与数据库的连接。

通过下列简单的添加操作理解整个运行过程

public class UserTest { // 添加操作 @Test public void testInsert() { // 1.创建Configuration对象并加载hibernate.cfg.xml配置文件 Configuration config = new Configuration().configure(); // 2.获取SessionFactory SessionFactory sessionFactory = config.buildSessionFactory(); // 3.得到一个Session Session session = sessionFactory.openSession(); // 4.开启事务 Transaction transaction = session.beginTransaction(); // 5.执行持久化操作 User user = new User(); user.setName("zhangsan"); user.setAge(21); user.setGender("男"); // 将对象保存到表中 session.save(user); // 6.提交事务 transaction.commit(); // 7.关闭资源 session.close(); sessionFactory.close(); } }

1.4 核心接口

Configuration 主要用于启动、加载和管理 Hibernate 的配置文件信息,在启动 Hibernate 的过程中,Configuration 实例首先确定 Hibernate 文件的位置,然后读取相关配置,最后创建一个唯一的 SessionFactory 实例 //此种方式默认会在 src 下读取 hibernate.cfg.xml 配置文件 Configuration config=new Configuration().configure(); //此种写法中 Hibernate 会到指定的位置查询配置文件 Configuration config = new Configuration().configure("文件的位置"); SessionFactory SessionFactory 接口负责读取并解析映射文件,以及建立 Session 对象,它在 Hibernate 中起到一个缓冲区的作用,会将 Configuration 对象中的所有配置信息、Hibernate 自动生成的 SQL 语句以及某些可重复利用的数据加载到缓冲区中。同时,它还维护了 Hibernate 的二级缓存。 //通常所使用的 SessionFactory 实例是通过 Configuration 对象获取的 SessionFactory sessionFactory = config.buildSessionFactory(); Session Session 是 Java 应用程序和 Hibernate 进行交互时所使用的主要接口,是持久化操作的核心 API。它主要用于读取、创建和删除映射对象的实例,这一系列的操作将被转换为数据表中的增加、修改、查询和删除操作 //采用openSession方法创建Session Session session = sessionFactory.openSession(); //采用getCurrentSession()方法创建Session Session session = sessionFactory.getCurrentSession(); openSession() 方法获取 Session 实例时, SessionFactory 直接创建一个新的 Session 实例 并且在使用完成后需要调用 close() 方法进行手动关闭; getCurrentSession() 方法创建的 Session 实例会被绑定到当前线程中, 它在提交或回滚操作时会自动关闭。

session提供持久化的方法

Transaction Transaction 接口主要是用于管理事务,它是 Hibernate 的数据库事务接口,且对底层的事务接口进行了封装 //Transaction 接口的实例对象是通过 Session 对象开启的 Transaction transaction = session.beginTransaction();

在 Transaction 接口中,提供了事务管理的常用方法

try{ transaction = session.beginTransaction(); //开启事务 session.save(user); //执行操作 transaction.commit(); //提交事务 }catch(Exception e) { transaction.rollback(); //回滚事务 }finally{ session.close(); //关闭资源 } Query Query 接口是 Hibernate 的查询接口,主要用于执行 Hibernate 的查询操作。 @Test public void testFindAll() { Configuration config = new Configuration().configure(); SessionFactory sessionFactory = config.buildSessionFactory(); // 1.得到一个Session Session session = sessionFactory.openSession(); Transaction transaction = session.beginTransaction(); // 2.编写 HQL,其中的User代表的是类 String hql = "from User"; // 3.创建Query查询对象 Query query = session.createQuery(hql); // 4.使用query.list()方法查询数据,并放入list集合 List<User> list = query.list(); for (User u : list) { System.out.println(u); } transaction.commit(); session.close(); sessionFactory.close(); } Criteria Criteria 接口是 Hibernate 提供的一个面向对象的查询条件接口,通过它完全不需要考虑数据库底层如何实现,以及 SQL 语句如何编写。 常用查询方法 public void testQBC() { Configuration config = new Configuration().configure(); SessionFactory sessionFactory = config.buildSessionFactory(); // 1.得到一个Session Session session = sessionFactory.openSession(); Transaction transaction = session.beginTransaction(); // 2.通过session获得Criteria对象 Criteria criteria = session.createCriteria(User.class); // 3.使用Restrictions的eq方法设定查询条件为name="zhangsan" // 4.向Criteria对象中添加查询条件 criteria.add(Restrictions.eq("name", "zhangsan")); // 5.执行Criterita的list()方法获得结果 List<User> list = criteria.list(); for (User u : list) { System.out.println(u); } transaction.commit(); session.close(); sessionFactory.close(); }

执行生成的sql

二、使用步骤

1.引入库

代码如下(示例):

import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns import warnings warnings.filterwarnings('ignore') import ssl ssl._create_default_https_context = ssl._create_unverified_context

2.读入数据

代码如下(示例):

data = pd.read_csv( 'https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv') print(data.head())

该处使用的url网络请求的数据。


总结

提示:这里对文章进行总结: 例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

最新回复(0)