Hibernate核心组件详解(8大核心组件)

Hibernate核心组件详解(8大核心组件)-mikechen

Hibernate核心组件主要有8大核心组件,包含:配置文件、持久化、映射文件等,下面分别详解。

Hibernate核心组件详解(8大核心组件)-mikechen

1.Hiberbate配置文件

主要用来配置数据库连接参数,它有两种格式:hibernate.properties和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="dialect">
            org.hibernate.dialect.MySQL5Dialect
        </property>
        <!-- 链接数据库url -->
        <property name="connection.url">
              <![CDATA[jdbc:mysql://localhost:3306/hibernate?useUnicode=true&characterEncoding=utf-8]]>
        </property>
        <!-- 连接数据库的用户名 -->
        <property name="connection.username">
            root
        </property>
        <!-- 数据库的密码 -->
        <property name="connection.password">
            123456
        </property>
        <!-- 数据库驱动 -->
        <property name="connection.driver_class">
            com.mysql.jdbc.Driver
        </property>
        <!-- 显示sql语句 -->
        <property name="show_sql">
            true
        </property>
        <!-- 格式化sql语句 -->
        <property name="format_sql">true</property>
        <!-- 映射文件配置 -->
        <mapping resource="com/mikechen/domain/User.hbm.xml" />
    </session-factory>
</hibernate-configuration>

hibernate.cfg.xml主要用于:配置数据库连接、事务管理、Hibernate 本身的配置信息。

 

2.持久化对象(PO)

在Hibernate应用中,一个数据表对应一个持久化对象PO。

比如User持久化对象就对应User表,如下所示:

package com.mikechen.domain;

public class User {
    private Integer id; // 唯一标识id
    private String name; // 姓名

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

 

3.映射文件

用来把PO与数据库中的数据表映射起来,比如我把刚才的User实体类与表关键一起。

如下所示:

<?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>
    <!-- name代表的是类名,table代表的是表名 -->
    <class name="com.mikechen.domain.User" table="user">
        <!-- name代表的是User类中的id属性,column代表的是user表中的主键id -->
        <id name="id" column="id">
            <!-- 主键生成策略 -->
            <generator class="native" />
        </id>
        <!-- 其他属性使用property标签映射 -->
        <property name="name" column="name" type="java.lang.String" />
    </class>
</hibernate-mapping>

这样我就把User实体类与user表关联一起了。

 

4.Configuration类

用来读取Hibernate配置文件和映射文件,并创建SessionFcatory对象。

如下所示:

// 1.创建Configuration对象并加载hibernate.cfg.xml配置文件 
Configuration config = new Configuration().configure();

 

5.SessionFactory接口

SessionFactory接口产生Session实例的工厂,负责Session实例的创建,可通过Configuration创建SessionFactory。

如下所示:

// 1.创建Configuration对象并加载hibernate.cfg.xml配置文件 
Configuration config = new Configuration().configure(); 

// 2.获取SessionFactory 
SessionFactory sessionFactory = config.buildSessionFactory();

 

6.Session接口

用来操作PO,它有get() save() update() delete()等方法,用来对PO进行加载、保存、更新及删除等操作,是hibernate的核心接口。

如下所示:

// 1.创建Configuration对象并加载hibernate.cfg.xml配置文件 
Configuration config = new Configuration().configure(); 

// 2.获取SessionFactory 
SessionFactory sessionFactory = config.buildSessionFactory();

// 3.得到一个Session 
Session session = sessionFactory.openSession();

 

7.Transaction接口

用来管理Hibernate事物,主要方法有commit()和rollback(),可从Session的beginTransaction()方法生成。

如下所示:

        // 1.创建Configuration对象并加载hibernate.cfg.xml配置文件
        Configuration config = new Configuration().configure();
        // 2.获取SessionFactory
        SessionFactory sessionFactory = config.buildSessionFactory();
        // 3.得到一个Session
        Session session = sessionFactory.openSession();
        // 4.开启事务
        Transaction transaction = session.beginTransaction();
        // 5.执行持久化操作
        User user = new User();
        user.setName("mikechen");
        // 将对象保存到表中
        session.save(user);
        // 6.提交事务
        transaction.commit();
        // 7.关闭资源
        session.close();
        sessionFactory.close();

 

8.Query接口

Query负责执行各种数据库查询,它可以使用HQL语言对PO进行查询操作。

陈睿mikechen

10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复面试即可获取《史上最全阿里Java面试题总结》,后台回复架构,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法