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 />
</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

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/554397.html
標籤:其他
上一篇:軟測外包干了3年,跳槽面試還得求助騰訊的老哥,最后僥幸上岸
下一篇:返回列表
