首页 > 其他分享 >9.3. Hibernate框架

9.3. Hibernate框架

时间:2023-06-05 22:55:57浏览次数:47  
标签:transaction 框架 Session session Hibernate 9.3 User

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

file

标签:transaction,框架,Session,session,Hibernate,9.3,User
From: https://www.cnblogs.com/yaoqian/p/17459177.html

相关文章

  • python学习框架
    Python简介与安装Python的历史与特点Python的安装与配置Python基础语法变量与数据类型运算符与表达式控制结构(条件判断与循环)函数与模块错误处理与异常Python数据结构列表(List)元组(Tuple)集合(Set)字典(Dictionary)Python面向对象编程类与对象继承与多态封......
  • SpringMVC 国际化 Hibernate Validator 扩展注解
    高版本JDKHibernateValidator扩展注解https://stackoverflow.com/questions/35986200/error-creating-bean-with-name-org-springframework-validation-beanvalidation-opt1.JDK8版本需要添加的jar包springmvc验证需要的jar├─classmate-0.8.0.jar├─hibernate-v......
  • Taro框架应用优势下的移动App开发创新模式
    最近公司的一些项目需要跨端框架,技术老大选了Taro,实践了一段时间下来,愈发觉得Taro是个好东西,所以在本篇文章中稍微介绍下。 什么是Taro?Taro(或称为Taro框架)是一种用于构建跨平台应用程序的开源JavaScript框架。它基于React和ReactNative,可以用于开发Web、iOS、Android和微......
  • 纯注解方式整合Spring和Mybatis框架
    一、配置信息介绍application-dao.xml  application-dao.xml配置文件中配置的内容包含以下4项:读取jdbc.properties文件中的数据连接信息。创建Druid对象,并将读取的数据连接信息注入到Druid数据连接池对象中。创建SqlSessionFactoryBean对象,将并将Druid对象注入到SqlSessi......
  • 数组和双指针框架
    数组和双指针框架快慢指针:有序数组/链表原地去重、数组/链表原地删除快慢窗口指针:在限定条件下找最长/短的连续子序列/子串/子数组左右最值指针:缩减一维/二维有序搜索空间 快慢指针:有序数组/链表原地去重、数组/链表原地删除题目:26.删除有序数组中的重复项核心模式:数组已经排序......
  • pycharm的scrapy框架-断点调试
    在文件根目录,也就是settings.py的上级目录,scrapy.cfg的同级目录,创建main.py:fromscrapy.cmdlineimportexecuteimportosimportsysif__name__=='__main__':sys.path.append(os.path.dirname(os.path.abspath(__file__)))execute(['scrapy','crawl......
  • 搭建Scrapy基础框架
    官方教程:安装指南—Scrapy2.5.0文档第一步:下载并安装python3.9第二步:下载并安装Anaconda下载地址:Anaconda|IndividualEdition第三步:安装scrapycmd命令:condainstall-cconda-forgescrapy第四步:创建scrapy项目:新建一个文件夹作为存放项目的空间:cmd到存放项目的文件夹:s......
  • Docker运行Django框架
    Django框架创建django-pg项目目录[root@docker~]#mkdirdocker-compose-django[root@docker~]#cddocker-compose-django/[root@dockerdocker-compose-django]#mkdirdjango-pg在项目目录下创建docker-compose.yml文件该文件定义了两个服务,一个是名为db的Postgres数......
  • 如易云揭秘1-框架
          如易云是什么如易云的框架是业务系统开发和技术中间件之前的桥梁,是对业务领域深入理解后的精巧封装,可以大大提升开发效率。全景图我对每块,做下简单说明。       se-context,业务上下文(主要是用户信息),大家都懂的。因为集成了springsecurity,基本......
  • 如易云揭秘1-框架(cache)
    Hibernate老鸟的话,对于Hibernatecache的精妙实现应该都是非常了解,即便不了解其实现原理,也知道Hibernatecache非常的易用,集成EhCache,对于系统性能也有很好的提升。那我们来看看如易云的框架,如易云的框架基于Mybatis,Mybatis新版本中也集成了cache,并且也有开源......