关于人工智能:93-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

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理