9.3. Hibernate框架
Hibernate是一个开源的持久层框架,它可以帮助我们将Java对象映射到数据库表中,并实现对象的持久化操作。Hibernate提供了丰富的API,可以方便地进行CRUD(增删改查)操作,而无需手动编写复杂的JDBC代码。
9.3.1. Hibernate核心组件
Hibernate主要包含以下几个核心组件:
- SessionFactory: 一个SessionFactory实例可以看作是一个数据库连接池,它的作用是创建Session实例。SessionFactory是线程安全的,通常情况下,在一个应用程序中只需要一个SessionFactory实例。
- Session: Session是Hibernate的核心,它用于执行持久化操作。在Session中执行的所有操作都是线程不安全的,所以每个线程都应该有自己的Session实例。
- Transaction: Transaction表示一个数据库事务。在Hibernate中,所有的持久化操作都应该在事务中进行。
- Configuration: Configuration用于读取Hibernate的配置信息,包括数据库连接信息、映射文件等。
9.3.2. Hibernate配置
在使用Hibernate时,我们需要进行一些基本配置,包括数据库连接信息、映射文件等。这些配置可以通过XML或者Java注解的方式进行。
9.3.2.1. 使用XML配置
以下是一个简单的Hibernate XML配置文件(hibernate.cfg.xml):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/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://localhost:3306/hibernate</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">password</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<mapping resource="com/example/entity/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
在这个配置文件中,我们配置了数据库连接信息、SQL方言、是否显示SQL语句等。此外,我们还注册了一个名为"User.hbm.xml"的映射文件。
接下来,我们需要创建User实体类对应的映射文件(User.hbm.xml):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.example.entity.User" table="users">
<id name="id" column="id">
<generator class="native"/>
</id>
<property name="name" column="name"/>
<property name="age" column="age"/>
</class>
</hibernate-mapping>
这个映射文件定义了User实体类与数据库表"users"的映射关系。其中,<id>元素表示主键映射,<property>元素表示属性映射。
9.3.2.2. 使用Java注解配置
除了使用XML配置文件,我们还可以使用Java注解进行配置。首先,我们需要为User实体类添加相应的注解:
import javax.persistence.*;
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(name = "name")
private String name;
@Column(name = "age")
private int age;
// getters and setters
// ...
}
接下来,我们需要创建一个配置类,以便获取SessionFactory实例
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
public class HibernateUtil {
private static final SessionFactory sessionFactory;
static {
try {
Configuration configuration = new Configuration();
configuration.configure("hibernate.cfg.xml"); // 加载Hibernate配置文件
configuration.addAnnotatedClass(User.class); // 注册注解类
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
.applySettings(configuration.getProperties())
.build();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
} catch (Throwable ex) {
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
9.3.3. Hibernate基本操作
在这一部分,我们将通过一个简单的CRUD示例来演示Hibernate的基本操作。
9.3.3.1. 创建(Create)
首先,我们需要创建一个User实例,并将其保存到数据库中。在保存之前,我们需要获取一个Session实例,然后开启一个事务。操作完成后,我们需要提交事务,并关闭Session。
import org.hibernate.Session;
import org.hibernate.Transaction;
public class UserDao {
public void saveUser(User user) {
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction transaction = null;
try {
transaction = session.beginTransaction();
session.save(user);
transaction.commit();
} catch (RuntimeException e) {
if (transaction != null) {
transaction.rollback();
}
throw e;
} finally {
session.close();
}
}
}
9.3.3.2. 读取(Read)
接下来,我们需要从数据库中读取一个User实例。这里我们通过get()方法来实现。
public User getUser(int id) {
Session session = HibernateUtil.getSessionFactory().openSession();
try {
return (User) session.get(User.class, id);
} finally {
session.close();
}
}
9.3.3.3. 更新(Update)
接下来,我们需要更新一个User实例。我们可以通过update()方法来实现。
public void updateUser(User user) {
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction transaction = null;
try {
transaction = session.beginTransaction();
session.update(user);
transaction.commit();
} catch (RuntimeException e) {
if (transaction != null) {
transaction.rollback();
}
throw e;
} finally {
session.close();
}
}
9.3.3.4. 删除(Delete)
最后,我们需要删除一个User实例。我们可以通过delete()方法来实现。
public void deleteUser(User user) {
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction transaction = null;
try {
transaction = session.beginTransaction();
session.delete(user);
transaction.commit();
} catch (RuntimeException e) {
if (transaction != null) {
transaction.rollback();
}
throw e;
} finally {
session.close();
}
}
9.3.4. 小结
在本章节中,我们学习了Hibernate框架的基本概念、配置方法以及CRUD操作。通过使用Hibernate,我们可以更轻松地实现Java对象与数据库表的映射,无需关心底层的JDBC代码。
请务必熟悉这些基本概念和操作,并在实际项目中加以应用。在掌握基本操作后,你可以进一步学习Hibernate的高级功能,如查询语言(HQL)、关联映射、缓存等,以满足更复杂的业务需求。
推荐阅读:
https://mp.weixin.qq.com/s/dV2JzXfgjDdCmWRmE0glDA
https://mp.weixin.qq.com/s/an83QZOWXHqll3SGPYTL5g

9.3. Hibernate框架的更多相关文章
- Hibernate框架之Criteria查询 和注解(重点☆☆☆☆☆,难点☆☆☆)
写好一篇博客,不是容易的事.原因是:你要给自己以后看的时候,还能看懂,最重要的是当别人看到你的博客文章的时候,也一样很清楚的明白你自己写的东西.其实这也是一种成就感!! 对于每一个知识点,要有必要的解 ...
- Hibernate 系列 01 - 框架技术 (介绍Hibernate框架的发展由来)
引导目录: Hibernate 系列教程 目录 本篇导航: 为什么学习框架技术 框架的概念 主流框架的介绍 1.为什么学习框架技术 如何制作一份看上去具有专业水准的PPT文档呢?一个简单的方法就是使用 ...
- 2.0、Hibernate框架的简单搭建
一.Hibernate:是一个开放源代码的对象关系映射框架,对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句 ...
- 【Hibernate框架】对象的三种持久化状态
一.综述 hibernate中的对象有三种状态,分别是TransientObjects(瞬时对象).PersistentObjects(持久化对象)和DetachedObjects(托管对象也叫做离线 ...
- hibernate框架int和Integer类型区别
hibernate 框架在定义实体时,int类型最好定义为Inttger类型,因为在注入时int是值类型不允许为空.
- SSH(Struts2+Spring+Hibernate)框架搭建流程<注解的方式创建Bean>
此篇讲的是MyEclipse9工具提供的支持搭建自加包有代码也是相同:用户登录与注册的例子,表字段只有name,password. SSH,xml方式搭建文章链接地址:http://www.cnblo ...
- ECLIPSE/JAVAWEB (二)三大框架之Hibernate框架 持续更新中...
(一)发展历史 在Struts框架中使用jdbc连接来读写数据库,我们最常见的就是打开数据库连接.使用复杂的sql语句进行读写.关闭连接,获得的数据又需要转换或封装后往外传,这是一个非常繁琐的过程. ...
- Hibernate框架简单应用
Hibernate框架简单应用 Hibernate的核心组件在基于MVC设计模式的JAVA WEB应用中,Hibernate可以作为模型层/数据访问层.它通过配置文件(hibernate.proper ...
- Hibernate框架(未完待续······)
作为SSH三大框架之一的Hibernate,是用来把程序的Dao层和数据库打交道用的,它封装了JDBC的步骤,是我们对数据库的操作更加简单,更加快捷.利用Hibernate框架我们就可以不再编 ...
- Hibernate框架之get和load方法的区别
我们在学习Hibernate框架时,经常会进行修改,删除操作,对于这些操作,我们都应该先加载对象,然后在执行或删除的操作,那么这里Hibernate提供了两种方法按照主键加载对象,也就是我要说的get ...
随机推荐
- 利用NGINX搭建部署直播流媒体服务器
直播如今是一个老生常谈的问题,怎么用于直播,大多数人只晓得,大佬某平台直播软件,点击开始即可直播.那么如何来搭建一个简易的直播平台呢?仅仅是有直播功能,没有涉及转码以及播放软件. 安装nginx以及r ...
- pandas之缺失值处理
在一些数据分析业务中,数据缺失是我们经常遇见的问题,缺失值会导致数据质量的下降,从而影响模型预测的准确性,这对于机器学习和数据挖掘影响尤为严重.因此妥善的处理缺失值能够使模型预测更为准确和有效. 为什 ...
- LeeCode 91双周赛复盘
T1: 不同的平均值数目 思路:排序 + 双指针 + 哈希存储 public int distinctAverages(int[] nums) { Arrays.sort(nums); Set< ...
- 结合ChatGPT和MINDSHOW自动生成PPT
结合chatGPT和MINDSHOW自动生成PPT应用场景 总结/朱季谦 一.首先,通过chatGPT说明你的需求,学会提问是Ai时代最关键的一步.你需要提供一些关键信息,如果没有关键信息,就按照大纲 ...
- 如何实现 Java SpringBoot 自动验证入参数据的有效性
Java SpringBoot 通过javax.validation.constraints下的注解,实现入参数据自动验证 如果碰到 @NotEmpty 否则不生效,注意看下 @RequestBody ...
- MySQL-(InnoDB)事务和锁
在事务并行处理背景下,不同的事务之间因数据共享的状态变化,存在着某种依赖/隔离影响.即事务隔离级别. 事务隔离级别,官网的解释在这里. InnoDB提供 SQL:1992 标准描述的所有四种事务隔离级 ...
- 在算数运算中,能否将 bool 值 true 视作 1?
true == 1; true + 1; If the destination type is bool, see 4.12. If the source type is bool, the valu ...
- Bing的AI聊天使用体验
Bing开启了AI聊天功能,我们这里做一个简单的测评,看看各种AI是否达到预期效果. PS:没有"魔法"的各位就不用看下去了 1.登陆 打开edge,遇到的第一个问题就是,使用&q ...
- Weblogic11g安装部署-winserver篇
目录 一.安装weblogic11g 1.1找到下载好的weblogic11g 1.2打开安装程序wls1033_oepe111150_win32.exe,并完成初始化如下图 1.3点击下一步并选择安 ...
- Langchain框架 prompt injection注入
Langchain框架 prompt injection注入 Prompt Injection 是一种攻击技术,黑客或恶意攻击者操纵 AI 模型的输入值,以诱导模型返回非预期的结果 Langchain ...