国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

一文快速入門體驗(yàn) Hibernate

這篇具有很好參考價(jià)值的文章主要介紹了一文快速入門體驗(yàn) Hibernate。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

前言

Hibernate 是一個(gè)優(yōu)秀的持久層的框架,當(dāng)然,雖然現(xiàn)在說(shuō)用得比較多的是 MyBaits,但是我工作中也不得不接觸 Hibernate,特別是一些老項(xiàng)目需要你維護(hù)的時(shí)候。所以,在此寫下這篇文章,方便自己回顧,也方便新手入門體驗(yàn) Hibernate。

注:使用的版本是 Hibernate 5.x 的

什么是 ORM?

ORM(Object Relational Mapping,對(duì)象關(guān)系映射)可以說(shuō)是一種理論,或者說(shuō)是一種設(shè)計(jì)思想,主要是讓「關(guān)系型數(shù)據(jù)庫(kù)」和「面向?qū)ο缶幊陶Z(yǔ)言」之間建立映射關(guān)系。目的是將數(shù)據(jù)庫(kù)中的數(shù)據(jù)轉(zhuǎn)換為對(duì)象,以便開(kāi)發(fā)人員更方便地進(jìn)行數(shù)據(jù)庫(kù)操作。

那為什么會(huì)出現(xiàn) ORM 呢?

在我們學(xué)習(xí) JDBC 的時(shí)候,我們需要編寫大量的 SQL 語(yǔ)句來(lái)執(zhí)行數(shù)據(jù)庫(kù)的 CRUD 操作,而且還需要手動(dòng)將查詢結(jié)果轉(zhuǎn)換為對(duì)象。這樣的操作是比較繁瑣的,還容易出錯(cuò),而且對(duì)于大型項(xiàng)目來(lái)說(shuō),數(shù)據(jù)庫(kù)操作的代碼量通常很大,維護(hù)起來(lái)也是非常困難的。所以,ORM 出現(xiàn)了,幫助我們簡(jiǎn)化數(shù)據(jù)庫(kù)操作,提高開(kāi)發(fā)效率。

市面上有很多不同的 ORM 框架可供選擇,在 Java 后端開(kāi)發(fā)的學(xué)習(xí)路線上,我們需要知道的就有 Hibernate 和 MyBatis。

簡(jiǎn)單來(lái)說(shuō),ORM 就是將數(shù)據(jù)庫(kù)操作封裝成對(duì)象操作,通過(guò)對(duì)象的方式來(lái)進(jìn)行數(shù)據(jù)庫(kù)的增刪改查。

理解 JPA 和 ORM 的關(guān)系

JPA(Java Persistence API)是 Java EE(現(xiàn)在稱為 Jakarta EE)規(guī)范中定義的一套 API,用于實(shí)現(xiàn)對(duì)象和關(guān)系數(shù)據(jù)庫(kù)之間的映射。JPA 提供了一種標(biāo)準(zhǔn)的方式來(lái)進(jìn)行對(duì)象持久化操作。而 ORM 是一個(gè)通用的概念,不局限于特定的編程語(yǔ)言或框架。比如 Python 也有對(duì)應(yīng)的實(shí)現(xiàn) ORM 的框架。

換句話說(shuō),JPA 它定義了一系列的接口和注解,開(kāi)發(fā)者可以使用這些接口和注解來(lái)描述對(duì)象和數(shù)據(jù)庫(kù)表之間的映射關(guān)系,并進(jìn)行數(shù)據(jù)庫(kù)操作。而 ORM 是一個(gè)更廣泛的概念,它可以適用于其他編程語(yǔ)言和框架,并不局限于 Java 和 JPA。

注:JPA 就只定義,沒(méi)有具體實(shí)現(xiàn),就是所謂的規(guī)范、標(biāo)準(zhǔn),我 JPA 規(guī)定了這些 API 能進(jìn)行相關(guān)操作,具體的實(shí)現(xiàn)是交給軟件廠商去實(shí)現(xiàn)的,比如 Hibernate 就是 JPA 標(biāo)準(zhǔn)的一種實(shí)現(xiàn)。

理解 JPA 和 Hibernate 的關(guān)系

Hibernate 是 JPA 的一種具體實(shí)現(xiàn),它使用了 JPA 規(guī)范定義的接口和注解,提供了 ORM 功能。

從時(shí)間線上來(lái)看:JPA(Java Persistence API)是在 Hibernate 之后出現(xiàn)的。

最早由 Gavin King 在2001年創(chuàng)建 Hibernate,目標(biāo)是簡(jiǎn)化開(kāi)發(fā)人員進(jìn)行數(shù)據(jù)庫(kù)的操作,以面向?qū)ο蟮姆绞饺ゲ僮鲾?shù)據(jù)庫(kù)。

JPA 的第一個(gè)版本是在2006年發(fā)布的,其中包含了一系列的接口和注解,用于描述對(duì)象和數(shù)據(jù)庫(kù)表之間的映射關(guān)系,以及進(jìn)行數(shù)據(jù)庫(kù)操作。Hibernate 的創(chuàng)始人 Gavin King 是 JPA 規(guī)范的主要參與者之一。

JPA 規(guī)范的出現(xiàn)是為了標(biāo)準(zhǔn)化 ORM 框架的行為和功能,使開(kāi)發(fā)人員可以在不同的 ORM 實(shí)現(xiàn)之間進(jìn)行切換,而不需要修改大量的代碼。

總結(jié)來(lái)說(shuō),Hibernate 是在 JPA 規(guī)范之前出現(xiàn)的 ORM 框架,而 JPA 是在 Hibernate 的基礎(chǔ)上產(chǎn)生的一套標(biāo)準(zhǔn)化的 ORM API。Hibernate 作為 JPA 的一種實(shí)現(xiàn),為開(kāi)發(fā)人員提供了強(qiáng)大的 ORM 功能,并成為了 JPA 規(guī)范的主要影響者之一。

正題:Hibernate 簡(jiǎn)介

Hibernate 是全自動(dòng)的對(duì)象關(guān)系映射的持久層框架,主要通過(guò)持久化類(.Java,當(dāng)然,也習(xí)慣說(shuō)的實(shí)體類)、映射文件(.hbm.xml)和配置文件(.cfg.xml)來(lái)操作關(guān)系型數(shù)據(jù)庫(kù)。

Hibernate 封裝了數(shù)據(jù)庫(kù)的訪問(wèn)細(xì)節(jié),通過(guò)配置的屬性文件,來(lái)關(guān)聯(lián)上關(guān)系型數(shù)據(jù)庫(kù)和實(shí)體類的。

Hibernate 中有 3 個(gè)我們需要知道的類,分別是配置類(Configuration)、會(huì)話工廠類(SessionFactory)和會(huì)話類(Session),注意,此處的 Session 可不是 HttpSession ?。?/strong>

  • 配置類

主要負(fù)責(zé)管理 Hibernate 的配置信息以及 Hibernate 的啟動(dòng),在運(yùn)行的時(shí)候,配置類會(huì)讀取一些底層的基本信息,比如數(shù)據(jù)庫(kù)的 URL、數(shù)據(jù)庫(kù)的用戶名、密碼、驅(qū)動(dòng)類、方言(適配器,Dialect)等信息。

  • 會(huì)話工廠類

主要負(fù)責(zé)生成 Session,這個(gè)工廠類會(huì)保存當(dāng)前數(shù)據(jù)庫(kù)中所有的映射關(guān)系。

  • 會(huì)話類

持久化操作的核心,通過(guò)它實(shí)現(xiàn) CRUD,它不是線程安全的,需要注意不要多個(gè)線程共享一個(gè) Session 對(duì)象。

理解會(huì)話二字:顧名思義,實(shí)際上就是交流,通信。在網(wǎng)絡(luò)中,一次會(huì)話可以是一次 HTTP 請(qǐng)求到 HTTP 響應(yīng)的過(guò)程,在數(shù)據(jù)庫(kù)操作中,一次會(huì)話,可以是一次新增操作的請(qǐng)求到數(shù)據(jù)庫(kù)中,然后數(shù)據(jù)庫(kù)做出響應(yīng)。

使用 Maven 構(gòu)建 Hibernate 項(xiàng)目

最原始引入 Jar 包的方式來(lái)創(chuàng)建 Hibernate 項(xiàng)目,可以參考這里:

http://m.biancheng.net/hibernate/first-example.html

由于我比較懶,所以使用 Maven 來(lái)構(gòu)建一個(gè)具有 Hibernate 的 Web 項(xiàng)目。

引入依賴項(xiàng)

分別引入 Hibernate、MySQL 數(shù)據(jù)庫(kù)驅(qū)動(dòng)、單元測(cè)試 Junit4(創(chuàng)建 Maven 時(shí)自帶的)。

<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>5.6.14.Final</version>
</dependency>

<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.47</version>
</dependency>

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
    <scope>test</scope>
</dependency>

Hibernate 配置文件

在 resource 目錄下創(chuàng)建一個(gè) hibernate.cfg.xml 配置文件:

<?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
                "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <!-- 配置數(shù)據(jù)源、連接池等相關(guān)信息 -->
        <property name="connection.url">jdbc:mysql://localhost:3306/demo_hibernate</property>
        <property name="connection.username">root</property>
        <property name="connection.password">123456</property>
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <!-- Hibernate 方言 -->
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
        <!-- 打印 SQL 語(yǔ)句-->
        <property name="show_sql">true</property>
        <!-- 格式化 SQL 語(yǔ)句-->
        <property name="format_sql">true</property>
        <!-- 映射文件所在位置 -->
        <mapping resource="cn/god23bin/demo/domain/mapping/User.hbm.xml" />
    </session-factory>
</hibernate-configuration>

以上的配置只是一小部分,還可以配置數(shù)據(jù)庫(kù)連接池、是否自動(dòng)生成數(shù)據(jù)庫(kù)表等等。

持久化類(實(shí)體類)

我們是通過(guò)持久化類來(lái)操作數(shù)據(jù)庫(kù)表的,也就是 ORM 的體現(xiàn),即對(duì)象映射到數(shù)據(jù)庫(kù)表,數(shù)據(jù)庫(kù)表也映射對(duì)象,操作對(duì)象就相當(dāng)于操作數(shù)據(jù)庫(kù)表。所以我們需要編寫持久化類來(lái)描述數(shù)據(jù)庫(kù)表,類中的屬性需要與數(shù)據(jù)庫(kù)表中的字段相匹配。

創(chuàng)建一個(gè) User 類,作為一個(gè) JavaBean(只有 getter 和 setter 方法,沒(méi)有其他業(yè)務(wù)方法的對(duì)象)

package cn.god23bin.demo.domain.entity;

/**
 * @author god23bin
 */
public class User {
    private Integer id;
    private String name;
    private String password;

    // 省略 getter 和 setter 方法
}

這種類(JavaBean)在日常開(kāi)發(fā)中是無(wú)處不在的,百分之百會(huì)用到,也稱它為 POJO(Plain Old Java Object),我們知道這種概念就行,反正這種類就只有屬性和對(duì)應(yīng)的 getter 和 setter 方法。

需要注意的幾點(diǎn):

  • 必須有無(wú)參構(gòu)造方法,便于 Hibernate 通過(guò) Constructor.newInstance() 實(shí)例化持久類。
  • 提供一個(gè)標(biāo)識(shí)屬性,一般這個(gè)標(biāo)識(shí)屬性映射的是數(shù)據(jù)庫(kù)表中的主鍵字段,就上面 User 中的 id 屬性。
  • 設(shè)計(jì)實(shí)體類,屬性都是聲明為 private 的。

Hibernate 映射

我們單獨(dú)寫了一個(gè)持久化類,目前是還沒(méi)有做映射的,也就是說(shuō)還不能通過(guò)這個(gè)類去操作數(shù)據(jù)庫(kù),那如何去做映射呢?

這就涉及到一個(gè)映射文件了,映射文件是 xml 文件,命名規(guī)則一般是 持久化類名.hbm.xml,以 User 為例,它的映射文件就是 User.hbm.xml。

我們可以在項(xiàng)目某個(gè)包下創(chuàng)建映射文件,我選擇在 cn.god23bin.demo.domain.mapping 包下創(chuàng)建:

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <!-- name 屬性:持久化類的全路徑 -->
    <!-- table 屬性:表的名稱 -->
    <class name="cn.god23bin.demo.domain.entity.User" table="user">
        <!-- 主鍵 -->
        <id name="id" column="id" type="java.lang.Integer">
            <!-- 主鍵生成策略 -->
            <generator class="native"/>
        </id>
        <!-- type 屬性 的三種寫法 -->
        <!-- 1. Java類型 :java.lang.String -->
        <!-- 2. Hibernate類型:string -->
        <!-- 3. SQL類型 :不能直接使用type屬性,需要子標(biāo)簽<column> -->
        <!--    <column name="name" sql-type="varchar(20)"/> -->
        <property name="name" column="name" type="string" not-null="true" length="50"/>
        <property name="password" column="password" not-null="true" length="50"/>
    </class>
</hibernate-mapping>

注意:映射文件的編寫需要按照持久化類來(lái)編寫,而不是數(shù)據(jù)庫(kù)表。

cn.god23bin.demo.domain.entity.User 稱為全路徑 | 全限定類名 | 全限定名 | 全包名,反正我是見(jiàn)過(guò)多種叫法的,指的都是同個(gè)東西。

如果映射文件中沒(méi)有配置 column 和 type 屬性,那么 Hibernate 會(huì)默認(rèn)使用持久化類中的屬性名和屬性類型去匹配數(shù)據(jù)庫(kù)表中的字段。

創(chuàng)建完這個(gè)映射文件后,我們需要在配置文件中 <session-factory> 里指定該映射文件所在的位置,這樣 Hibernate 才知道映射文件在哪里。

<mapping resource="cn/god23bin/demo/domain/mapping/User.hbm.xml" />

完整的配置文件:

<?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
                "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="connection.url">jdbc:mysql://localhost:3306/demo_hibernate</property>
        <property name="connection.username">root</property>
        <property name="connection.password">123456</property>
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="show_sql">true</property>
        <property name="format_sql">true</property>
        <!-- 映射文件所在位置 -->
        <mapping resource="cn/god23bin/demo/domain/mapping/User.hbm.xml" />
    </session-factory>
</hibernate-configuration>

配置 pom.xml

由于我是 Maven 來(lái)構(gòu)建項(xiàng)目的,所以需要新增一個(gè)配置,便于讓 Hibernate 能夠找到 Maven 工程編譯后的 *.hbm.xml 映射文件。

在 pom.xml 中,找到 build 標(biāo)簽,在里面加上如下的配置:

<build>
	...
    <resources>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.xml</include>
            </includes>
            <filtering>true</filtering>
        </resource>
        <resource>
            <directory>src/main/resources</directory>
            <includes>
                <include>**/*.xml</include>
                <include>**/*.properties</include>
            </includes>
        </resource>
    </resources>
</build>

Hibernate 工具類

Hibernate 有 3 個(gè)需要知道的類,不知道現(xiàn)在你還記不記得,不記得就翻到上面簡(jiǎn)介那里看看。

其中,Session 是持久化操作的核心類,通過(guò)它可以實(shí)現(xiàn) CRUD 操作。那么如何獲取 Session 對(duì)象呢?顯而易見(jiàn),就是通過(guò) Session 工廠,即 SessionFactory 對(duì)象,來(lái)獲取 Session 對(duì)象,那問(wèn)題又來(lái)了,Session 工廠如何獲?。?/p>

這里就得說(shuō)到 Configuration 配置類了,通過(guò)它創(chuàng)建 SessionFactory 對(duì)象,進(jìn)而獲取 Session 對(duì)象。

核心代碼是這樣的:

// 讀取 hibernate.cfg.xml 配置文件并創(chuàng)建 SessionFactory
Configuration configure = new Configuration().configure(); // 加載配置文件,configure() 方法可以指定配置文件所在位置,沒(méi)有指定的話,默認(rèn)為項(xiàng)目的 classpath 根目錄下的 hibernate.cfg.xml
SessionFactory sessionFactory = configure.buildSessionFactory();  // 創(chuàng)建 SessionFactory 對(duì)象

一般情況下,我們會(huì)寫一個(gè)工具類來(lái)獲取 Session 對(duì)象,如下:

package cn.god23bin.demo.util;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

/**
 * @author god23bin
 */
public class HibernateUtil {

    /**
     * 一個(gè) ThreadLocal 變量,用于存儲(chǔ)線程局部變量 Session。
     * ThreadLocal 提供了線程局部變量的機(jī)制,保證每個(gè)線程都有自己的 Session 實(shí)例。
     */
    private static final ThreadLocal<Session> THREAD_LOCAL = new ThreadLocal<>();

    private static SessionFactory sessionFactory;

    static {
        try{
            // 讀取 hibernate.cfg.xml 配置文件并創(chuàng)建 SessionFactory
            Configuration configure = new Configuration().configure();
            sessionFactory = configure.buildSessionFactory();
        } catch (Exception e) {
            System.err.println("Hibernate 創(chuàng)建會(huì)話工廠失??!");
            e.printStackTrace();
        }
    }

    /**
     * 獲取 Session 對(duì)象
     */
    public static Session getSession() {
        Session session = THREAD_LOCAL.get();
        if (session == null || session.isOpen()) {
            if (sessionFactory == null) {
                rebuildSessionFactory();
            }
            session = (sessionFactory != null) ? sessionFactory.openSession() : null;
            THREAD_LOCAL.set(session);
        }
        return session;
    }

    /**
     * 重新創(chuàng)建會(huì)話工廠
     */
    private static void rebuildSessionFactory() {
        try{
            // 讀取 hibernate.cfg.xml 配置文件并創(chuàng)建 SessionFactory
            Configuration configure = new Configuration().configure();
            sessionFactory = configure.buildSessionFactory();
        } catch (Exception e) {
            System.err.println("Hibernate 創(chuàng)建會(huì)話工廠失敗!");
            e.printStackTrace();
        }
    }

    /**
     * 返回唯一的會(huì)話工廠對(duì)象
     */
    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }

    /**
     * 關(guān)閉 Session 對(duì)象
     */
    public static void closeSession() {
        Session session = THREAD_LOCAL.get();
        THREAD_LOCAL.remove();
        if (session != null) {
            session.close();
        }
    }

}

測(cè)試

創(chuàng)建一張 user 表:

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `name` varchar(50) NOT NULL COMMENT '名稱',
  `password` varchar(50) NOT NULL COMMENT '密碼',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

編寫一個(gè)測(cè)試類,由于我這里是 Maven 項(xiàng)目,按照約定,測(cè)試類放在 /src/test/java/ 目錄下,我這里就把這個(gè)測(cè)試類 HibernateTest 放在 java 目錄下的 cn.god23bin.demo 包中:

package cn.god23bin.demo;

import cn.god23bin.demo.domain.entity.User;
import cn.god23bin.demo.util.HibernateUtil;
import org.hibernate.Session;
import org.junit.Test;

/**
 * @author god23bin
 */
public class HibernateTest {

    @Test
    public void test() {
        // 獲取 Session 對(duì)象
        Session session = HibernateUtil.getSession();
        User user = new User();
        user.setName("god23bin");
        user.setPassword("123456");
        try {
            // 開(kāi)啟事務(wù),即使是執(zhí)行一次數(shù)據(jù)庫(kù)操作,也是事務(wù)
            session.beginTransaction();
            // 執(zhí)行插入操作
            session.save(user);
            // 提交事務(wù)
            session.getTransaction().commit();
        } catch (Exception e) {
            // 發(fā)生異常,則回滾事務(wù)
            session.getTransaction().rollback();
            System.out.println("插入U(xiǎn)ser數(shù)據(jù)失??!");
            e.printStackTrace();
        } finally{
            // 關(guān)閉 Session 對(duì)象
            HibernateUtil.closeSession();
        }
    }
}

控制臺(tái)輸出:

五月 07, 2023 11:52:13 下午 org.hibernate.Version logVersion
INFO: HHH000412: Hibernate ORM core version 5.6.14.Final
五月 07, 2023 11:52:15 下午 org.hibernate.annotations.common.reflection.java.JavaReflectionManager <clinit>
INFO: HCANN000001: Hibernate Commons Annotations {5.1.2.Final}
五月 07, 2023 11:52:17 下午 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
WARN: HHH10001002: Using Hibernate built-in connection pool (not for production use!)
五月 07, 2023 11:52:17 下午 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001005: using driver [com.mysql.jdbc.Driver] at URL [jdbc:mysql://localhost:3306/demo_hibernate]
五月 07, 2023 11:52:17 下午 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001001: Connection properties: {user=root, password=****}
五月 07, 2023 11:52:17 下午 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001003: Autocommit mode: false
五月 07, 2023 11:52:17 下午 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections <init>
INFO: HHH000115: Hibernate connection pool size: 20 (min=1)
Sun May 07 23:52:17 CST 2023 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
五月 07, 2023 11:52:18 下午 org.hibernate.dialect.Dialect <init>
INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect
五月 07, 2023 11:52:20 下午 org.hibernate.engine.transaction.jta.platform.internal.JtaPlatformInitiator initiateService
INFO: HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
Hibernate: 
    insert 
    into
        user
        (name, password) 
    values
        (?, ?)

Process finished with exit code 0

我們可以查看數(shù)據(jù)庫(kù)中 User 表中是否存在我們剛剛插入的數(shù)據(jù),可以發(fā)現(xiàn)是存在的:

總結(jié)

我們依次說(shuō)明了什么是 ORM,并且梳理了 JPA 和 ORM的關(guān)系以及 JPA 和 Hibernate 的關(guān)系。

我相信還是有很多人沒(méi)有搞清楚它們之間的聯(lián)系的,就只是學(xué)了而已,或者說(shuō)學(xué)過(guò)而已,當(dāng)然,也有的人說(shuō),知道了它們的關(guān)系又能怎樣呢?我不知道我也能用 Hibernate 去操作數(shù)據(jù)庫(kù)。話雖如此,但是我認(rèn)為明白它們之間的聯(lián)系,是有利于我們后續(xù)其他知識(shí)的學(xué)習(xí)的,也能跟其他知識(shí)建立起聯(lián)系,而不是單獨(dú)的一個(gè)知識(shí)孤島。

接著介紹了 Hibernate,以及如何使用 Maven 項(xiàng)目去構(gòu)建一個(gè)具有 Hibernate 的 Web 應(yīng)用,畢竟咱們開(kāi)發(fā),基本都是 Web 應(yīng)用程序。

使用 Maven 去構(gòu)建,就需要引入相關(guān)的依賴,Hibernate 的核心依賴以及數(shù)據(jù)庫(kù)驅(qū)動(dòng)的依賴,接著需要編寫配置文件、持久化類、持久化類的映射文件,最后寫一個(gè)獲取 Session 對(duì)象的工具類,便于我們獲取 Session 對(duì)象執(zhí)行數(shù)據(jù)庫(kù)操作。

以上,就是本篇文章的內(nèi)容,現(xiàn)在恭喜你已經(jīng)入門 Hibernate 了!是不是很快上手了!哈哈哈

最后的最后

希望各位屏幕前的靚仔靚女們給個(gè)三連!你輕輕地點(diǎn)了個(gè)贊,那將在我的心里世界增添一顆明亮而耀眼的星!

咱們下期再見(jiàn)!文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-437586.html

到了這里,關(guān)于一文快速入門體驗(yàn) Hibernate的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【一文詳解】知識(shí)分享:(C#開(kāi)發(fā)學(xué)習(xí)快速入門)

    【一文詳解】知識(shí)分享:(C#開(kāi)發(fā)學(xué)習(xí)快速入門)

    c語(yǔ)言 是面向過(guò)程。 c++ 是面向過(guò)程+面向?qū)ο蟆?c# 是純粹的面向?qū)ο? 核心思想是以人的思維習(xí)慣來(lái)分析和解決問(wèn)題。萬(wàn)物皆對(duì)象 。 面向?qū)ο箝_(kāi)發(fā)步驟: 分析對(duì)象 特征 行為 關(guān)系(對(duì)象關(guān)系/類關(guān)系) 寫代碼: 特征–成員變量 方法–成員方法 實(shí)例化–具體對(duì)象 Note(補(bǔ)充知識(shí))

    2024年01月19日
    瀏覽(130)
  • 【操作系統(tǒng)】一文快速入門,很適合JAVA后端看

    【操作系統(tǒng)】一文快速入門,很適合JAVA后端看

    作者簡(jiǎn)介: 目錄 1.概述 2.CPU管理 3.內(nèi)存管理 4.IO管理 操作系統(tǒng)可以看作一個(gè)計(jì)算機(jī)的管理系統(tǒng),對(duì)計(jì)算機(jī)的硬件資源提供了一套完整的管理解決方案。計(jì)算機(jī)的硬件組成有五大模塊:運(yùn)算器、控制器、存儲(chǔ)器、輸入設(shè)備、輸出設(shè)備。操作系統(tǒng)實(shí)際上就是對(duì)這個(gè)五塊資源各自提

    2024年02月10日
    瀏覽(22)
  • 【Java】一文帶你快速入門Shiro權(quán)限框架

    【Java】一文帶你快速入門Shiro權(quán)限框架

    ??推薦網(wǎng)站(不斷完善中):個(gè)人博客 ??個(gè)人主頁(yè):個(gè)人主頁(yè) ??相關(guān)專欄:CSDN專欄 ??立志賺錢,干活想躺,瞎分享的摸魚(yú)工程師一枚 在我們實(shí)戰(zhàn)開(kāi)發(fā)過(guò)程中,對(duì)于權(quán)限的控制是必不可少的,一個(gè)系統(tǒng)中常見(jiàn)的有 普通會(huì)員、管理員、超級(jí)管理員 等等不同的角色出現(xiàn)。 我們

    2024年02月08日
    瀏覽(31)
  • 【node進(jìn)階】一文帶你快速入門koa框架

    【node進(jìn)階】一文帶你快速入門koa框架

    ? 作者簡(jiǎn)介:一名普通本科大三的學(xué)生,致力于提高前端開(kāi)發(fā)能力 ? 個(gè)人主頁(yè):前端小白在前進(jìn)的主頁(yè) ?? 系列專欄 : node.js學(xué)習(xí)專欄 ?? 個(gè)人社區(qū) : 個(gè)人交流社區(qū) ?? 學(xué)習(xí)格言: ?? 打不倒你的會(huì)使你更強(qiáng)!?? ?? 刷題網(wǎng)站:這段時(shí)間有許多的小伙伴在問(wèn)有沒(méi)有什么

    2024年01月22日
    瀏覽(23)
  • 【前沿技術(shù)】一文帶你快速入門 K8s

    【前沿技術(shù)】一文帶你快速入門 K8s

    ?? 博主介紹 : 博主從事應(yīng)用安全和大數(shù)據(jù)領(lǐng)域,有8年研發(fā)經(jīng)驗(yàn),5年面試官經(jīng)驗(yàn),Java技術(shù)專家,WEB架構(gòu)師,阿里云專家博主,華為云云享專家,51CTO TOP紅人 Java知識(shí)圖譜點(diǎn)擊鏈接: 體系化學(xué)習(xí)Java(Java面試專題) ???? 感興趣的同學(xué)可以收藏關(guān)注下 , 不然下次找不到喲

    2024年02月16日
    瀏覽(21)
  • 【一文詳解】知識(shí)分享:(ASP.Net Core基礎(chǔ)學(xué)習(xí)及快速入門)

    【一文詳解】知識(shí)分享:(ASP.Net Core基礎(chǔ)學(xué)習(xí)及快速入門)

    .Net .NET是微軟的一個(gè)開(kāi)發(fā)平臺(tái),這個(gè)平臺(tái)的一大特點(diǎn)就是跨語(yǔ)言性,不管是什么語(yǔ)言,c、c++、c#、F#、J#、vb等語(yǔ)言都可以用這個(gè)平臺(tái)合作開(kāi)發(fā); .NET,它是微軟創(chuàng)建的一個(gè)用于構(gòu)建多種不同類型的應(yīng)用程序的開(kāi)發(fā)人員平臺(tái)。 .NET 是一個(gè)廣泛的術(shù)語(yǔ),用于描述整個(gè) Microsoft 的軟件

    2024年02月01日
    瀏覽(154)
  • 一文帶你入門Arco Design,快速構(gòu)建一個(gè)Arco項(xiàng)目Demo

    一文帶你入門Arco Design,快速構(gòu)建一個(gè)Arco項(xiàng)目Demo

    確保你的機(jī)器中有Node.js和Git環(huán)境,如果沒(méi)有,參考如下文章: Node.js安裝及環(huán)境配置 Git安裝配置教程 開(kāi)始開(kāi)發(fā)之前,請(qǐng)確認(rèn)本地環(huán)境中安裝好了 node , git 和 arco cli 其中 arco cli 是安裝項(xiàng)目模版的工具,請(qǐng)運(yùn)行以下命令安裝: 在某一個(gè)文件夾下運(yùn)行Shell,運(yùn)行如下命令新建項(xiàng)

    2024年02月13日
    瀏覽(27)
  • AI繪畫 | 一文學(xué)會(huì)Midjourney繪畫,創(chuàng)作自己的AI作品(快速入門+參數(shù)介紹)

    AI繪畫 | 一文學(xué)會(huì)Midjourney繪畫,創(chuàng)作自己的AI作品(快速入門+參數(shù)介紹)

    首先,生成將中文描述詞翻譯成英文 然后在輸入端輸入: /imagine prompt:Bravely running boy in Q version, cute head portrait 最后,稍等一會(huì)即可輸出效果 說(shuō)明: 下面的U1、U2、U3、U4代表的第一張、第二張、第三張、第四張圖片。點(diǎn)擊可以生成對(duì)應(yīng)圖片的單個(gè)圖。如下圖所示。 V1、V2、V

    2024年02月12日
    瀏覽(26)
  • 【算法】一文帶你快速入門動(dòng)態(tài)規(guī)劃算法以及動(dòng)規(guī)中的空間優(yōu)化

    【算法】一文帶你快速入門動(dòng)態(tài)規(guī)劃算法以及動(dòng)規(guī)中的空間優(yōu)化

    君兮_的個(gè)人主頁(yè) 即使走的再遠(yuǎn),也勿忘啟程時(shí)的初心 C/C++ 游戲開(kāi)發(fā) Hello,米娜桑們,這里是君兮_,如果給算法的難度和復(fù)雜度排一個(gè)排名,那么動(dòng)態(tài)規(guī)劃算法一定名列前茅。在最開(kāi)始沒(méi)有什么整體的方法的時(shí)候,我也曾經(jīng)被動(dòng)態(tài)規(guī)劃折磨過(guò)很長(zhǎng)時(shí)間,通過(guò)我一段時(shí)間的刷題

    2024年02月05日
    瀏覽(30)
  • 【Vue 快速入門系列】一文透徹vue中使用axios及跨域問(wèn)題的解決

    【Vue 快速入門系列】一文透徹vue中使用axios及跨域問(wèn)題的解決

    Axios(ajax i/o system),是Vue創(chuàng)建者主推的請(qǐng)求發(fā)送方式,因其簡(jiǎn)單的配置與良好的性能被前端愛(ài)好者所喜愛(ài)。眾所周知,在進(jìn)行網(wǎng)頁(yè)設(shè)計(jì)時(shí)經(jīng)常需要從后端拿數(shù)據(jù),在Web應(yīng)用初期會(huì)將整個(gè)頁(yè)面或者文檔直接拿過(guò)來(lái),隨著Web應(yīng)用的發(fā)展,人們對(duì)性能的不斷提升,逐漸向無(wú)頁(yè)面刷新

    2024年02月12日
    瀏覽(41)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包