9.3. Hibernate框架

打印 上一主题 下一主题

主题 840|帖子 840|积分 2520

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):
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
  3. <hibernate-configuration>
  4.     <session-factory>
  5.         <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
  6.         <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate</property>
  7.         <property name="hibernate.connection.username">root</property>
  8.         <property name="hibernate.connection.password">password</property>
  9.         <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
  10.         <property name="hibernate.show_sql">true</property>
  11.         <property name="hibernate.hbm2ddl.auto">update</property>
  12.         <mapping resource="com/example/entity/User.hbm.xml"/>
  13.     </session-factory>
  14. </hibernate-configuration>
复制代码
在这个配置文件中,我们配置了数据库连接信息、SQL方言、是否显示SQL语句等。此外,我们还注册了一个名为"User.hbm.xml"的映射文件。
接下来,我们需要创建User实体类对应的映射文件(User.hbm.xml):
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
  3. <hibernate-mapping>
  4.     <class name="com.example.entity.User" table="users">
  5.         <id name="id" column="id">
  6.             <generator />
  7.         </id>
  8.         <property name="name" column="name"/>
  9.         <property name="age" column="age"/>
  10.     </class>
  11. </hibernate-mapping>
复制代码
这个映射文件定义了User实体类与数据库表"users"的映射关系。其中,元素表示主键映射,元素表示属性映射。
9.3.2.2. 使用Java注解配置

除了使用XML配置文件,我们还可以使用Java注解进行配置。首先,我们需要为User实体类添加相应的注解:
  1. import javax.persistence.*;
  2. @Entity
  3. @Table(name = "users")
  4. public class User {
  5.     @Id
  6.     @GeneratedValue(strategy = GenerationType.IDENTITY)
  7.     private int id;
  8.     @Column(name = "name")
  9.     private String name;
  10.     @Column(name = "age")
  11.     private int age;
  12.     // getters and setters
  13.     // ...
  14. }
复制代码
接下来,我们需要创建一个配置类,以便获取SessionFactory实例
  1. import org.hibernate.SessionFactory;  
  2. import org.hibernate.boot.registry.StandardServiceRegistryBuilder;  
  3. import org.hibernate.cfg.Configuration;  
  4. import org.hibernate.service.ServiceRegistry;
  5. public class HibernateUtil {  
  6. private static final SessionFactory sessionFactory;
  7. static {
  8.     try {
  9.         Configuration configuration = new Configuration();
  10.         configuration.configure("hibernate.cfg.xml"); // 加载Hibernate配置文件
  11.         configuration.addAnnotatedClass(User.class); // 注册注解类
  12.         ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
  13.                 .applySettings(configuration.getProperties())
  14.                 .build();
  15.         sessionFactory = configuration.buildSessionFactory(serviceRegistry);
  16.     } catch (Throwable ex) {
  17.         throw new ExceptionInInitializerError(ex);
  18.     }
  19. }
  20. public static SessionFactory getSessionFactory() {
  21.     return sessionFactory;
  22. }
复制代码
9.3.3. Hibernate基本操作

在这一部分,我们将通过一个简单的CRUD示例来演示Hibernate的基本操作。
9.3.3.1. 创建(Create)

首先,我们需要创建一个User实例,并将其保存到数据库中。在保存之前,我们需要获取一个Session实例,然后开启一个事务。操作完成后,我们需要提交事务,并关闭Session。
  1. import org.hibernate.Session;
  2. import org.hibernate.Transaction;
  3. public class UserDao {
  4.     public void saveUser(User user) {
  5.         Session session = HibernateUtil.getSessionFactory().openSession();
  6.         Transaction transaction = null;
  7.         try {
  8.             transaction = session.beginTransaction();
  9.             session.save(user);
  10.             transaction.commit();
  11.         } catch (RuntimeException e) {
  12.             if (transaction != null) {
  13.                 transaction.rollback();
  14.             }
  15.             throw e;
  16.         } finally {
  17.             session.close();
  18.         }
  19.     }
  20. }
复制代码
9.3.3.2. 读取(Read)

接下来,我们需要从数据库中读取一个User实例。这里我们通过get()方法来实现。
  1. public User getUser(int id) {
  2.     Session session = HibernateUtil.getSessionFactory().openSession();
  3.     try {
  4.         return (User) session.get(User.class, id);
  5.     } finally {
  6.         session.close();
  7.     }
  8. }
复制代码
9.3.3.3. 更新(Update)

接下来,我们需要更新一个User实例。我们可以通过update()方法来实现。
  1. public void updateUser(User user) {
  2.     Session session = HibernateUtil.getSessionFactory().openSession();
  3.     Transaction transaction = null;
  4.     try {
  5.         transaction = session.beginTransaction();
  6.         session.update(user);
  7.         transaction.commit();
  8.     } catch (RuntimeException e) {
  9.         if (transaction != null) {
  10.             transaction.rollback();
  11.         }
  12.         throw e;
  13.     } finally {
  14.         session.close();
  15.     }
  16. }
复制代码
9.3.3.4. 删除(Delete)

最后,我们需要删除一个User实例。我们可以通过delete()方法来实现。
  1. public void deleteUser(User user) {
  2.     Session session = HibernateUtil.getSessionFactory().openSession();
  3.     Transaction transaction = null;
  4.     try {
  5.         transaction = session.beginTransaction();
  6.         session.delete(user);
  7.         transaction.commit();
  8.     } catch (RuntimeException e) {
  9.         if (transaction != null) {
  10.             transaction.rollback();
  11.         }
  12.         throw e;
  13.     } finally {
  14.         session.close();
  15.     }
  16. }
复制代码
9.3.4. 小结

在本章节中,我们学习了Hibernate框架的基本概念、配置方法以及CRUD操作。通过使用Hibernate,我们可以更轻松地实现Java对象与数据库表的映射,无需关心底层的JDBC代码。
请务必熟悉这些基本概念和操作,并在实际项目中加以应用。在掌握基本操作后,你可以进一步学习Hibernate的高级功能,如查询语言(HQL)、关联映射、缓存等,以满足更复杂的业务需求。
推荐阅读:
https://mp.weixin.qq.com/s/dV2JzXfgjDdCmWRmE0glDA
https://mp.weixin.qq.com/s/an83QZOWXHqll3SGPYTL5g


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

徐锦洪

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表