共计 4921 个字符,预计需要花费 13 分钟才能阅读完成。
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 |