hibernate的詳解


一,環境的搭建

1)創建maven項目

 

 

 

 2)導入依賴的jar包.pom.xml和創建實體類User

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.hibernate</groupId>
  <artifactId>hibernate004</artifactId>
  <version>1.0-SNAPSHOT</version>

  <name>hibernate004</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/commons-logging/commons-logging -->
    <dependency>
      <groupId>commons-logging</groupId>
      <artifactId>commons-logging</artifactId>
      <version>1.1.1</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-core</artifactId>
      <version>5.3.3.Final</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.hibernate.validator/hibernate-validator -->
    <dependency>
      <groupId>org.hibernate.validator</groupId>
      <artifactId>hibernate-validator</artifactId>
      <version>6.0.7.Final</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-entitymanager -->
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-entitymanager</artifactId>
      <version>5.3.6.Final</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-c3p0 -->
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-c3p0</artifactId>
      <version>5.3.6.Final</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.mchange/c3p0 -->
    <dependency>
      <groupId>com.mchange</groupId>
      <artifactId>c3p0</artifactId>
      <version>0.9.5.2</version>
    </dependency>

    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.35</version>
    </dependency>
  </dependencies>

  <build>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      <plugins>
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.0.0</version>
        </plugin>
        <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.7.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.20.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-jar-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</project>

實體類

package com.hibernate;

public class User {
    private Integer id;
    private Integer age;
    private String name;
    private String password;

    public User() {
    }

    public Integer getId() {
        return id;
    }

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

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

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

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", age=" + age +
                ", name='" + name + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

3)創建resources的文件夾和創建hibernate.cfg.xml的配置文件以及hibernate.hbm.xml文件

hibernate.cfg.xml文件

<?xml version="1.0" encoding="GBK"?>
<!-- 指定Hibernate配置文件的DTD信息 -->
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<!-- hibernate- configuration是連接配置文件的根元素 -->
<hibernate-configuration>
    <session-factory>
        <!-- 指定連接數據庫所用的驅動 -->
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <!-- 指定連接數據庫的url,hibernate連接的數據庫名 -->
        <property name="connection.url">jdbc:mysql://localhost/hibernate001</property>
        <!-- 指定連接數據庫的用戶名 -->
        <property name="connection.username">root</property>
        <!-- 指定連接數據庫的密碼 -->
        <property name="connection.password">123456</property>
        <!-- 指定連接池里最大連接數 -->
        <property name="hibernate.c3p0.max_size">20</property>
        <!-- 指定連接池里最小連接數 -->
        <property name="hibernate.c3p0.min_size">1</property>
        <!-- 指定連接池里連接的超時時長 -->
        <property name="hibernate.c3p0.timeout">5000</property>
        <!-- 指定連接池里最大緩存多少個Statement對象 -->
        <property name="hibernate.c3p0.max_statements">100</property>
        <property name="hibernate.c3p0.idle_test_period">3000</property>
        <property name="hibernate.c3p0.acquire_increment">2</property>
        <property name="hibernate.c3p0.validate">true</property>
        <!-- 指定數據庫方言 -->
        <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
        <!-- 根據需要自動創建數據表 -->
        <property name="hbm2ddl.auto">update</property>
        <!-- 顯示Hibernate持久化操作所生成的SQL -->
        <property name="show_sql">true</property>
        <!-- 將SQL腳本進行格式化后再輸出 -->
        <property name="hibernate.format_sql">true</property>
        <!--設置數據源,由於上述使用的屬性有hibernate.c3p0.*,會自動設置為C3P0可不設。默認為hibernate數據源。-->
        <property name="hibernate.connection.provider_class">org.hibernate.c3p0.internal.C3P0ConnectionProvider</property>
        <!--current_session作用域,thread表示當前線程用同一個session-->
        <property name="current_session_context_class">thread</property>
        <!-- 羅列所有的映射文件,resources為文件路徑,最好和主配置文件同一目錄,自己開始沒同一目錄報錯了.原因未知,就是找不到 -->
        <mapping resource="hibernate.hbm.xml"/>
    </session-factory>
</hibernate-configuration>

hibernate.hbm.xml文件

<?xml version="1.0"?>
        <!DOCTYPE hibernate-mapping PUBLIC
                "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
                "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
        <!--package為實體類包名-->
<hibernate-mapping package="com.hibernate">
    <!--name為類名,如果沒寫包名,這里的類名要寫成權限定性類名.
    table為表名,不寫默認為簡單類名。tips:Windows系統mysql數據庫默認不區分大小寫。-->
    <class name="User" table="user">
        <!--id標簽表示這是主鍵,name為實體類屬性名,column為對應表的
        gernarator參考https://blog.csdn.net/ye1992/article/details/19632001說明
        這里native就好了。-->
        <id name="id" column="id">
            <generator class="native"/>
        </id>
        <!--name為屬性名,colunmn就是列名-->
        <property name="age" column="age"/>
        <property name="name" column="name"/>
        <property name="password" column="password"/>
    </class>
</hibernate-mapping>

 

4) 創建一個hibernateUtile工具類和測試類

hibernateUtile類

package com.hibernate;

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


public class HibernateUtil {
    private static SessionFactory sf;
    static{
        Configuration configure = new Configuration().configure();
        sf= configure.buildSessionFactory();
    }

    //opensession
    public static Session getOpenSession(){
        return sf.openSession();
    }
    //currentsession
    public static Session getCurrentSession(){
        return sf.getCurrentSession();
    }
}

測試類

package com.hibernate;

import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;

public class Hibernate_test {
    @Test
    public void test01(){
        Session session=HibernateUtil.getOpenSession();
        Transaction transaction = session.beginTransaction();

        User user=session.get(User.class,2);
        System.out.println(user);

        transaction.commit();
        session.close();
    }
}

測試結果

說明hibernate的環境搭建成功了

二,配置文件說明

hibernate有兩個配置文件 hibernate.cfg.xml和hibernate.hbm.xml

配置文件中的主要內容,已經加上了注釋信息,可以網上查看

三,什么是hibernate?

Hibernate是一個操作數據庫的持久層框架,實現了對JDBC的封裝,.Hibernate是一個ORM(對象關系映射)框架,我們在寫程序時 ,用的時面向對象的方法,但是在關系型數據庫里,存的是一條條的數據,為了用純面向對象的思想解決問題,所有需要將程序中的對象和數據庫的記錄建立起映射關系,ORM就是這樣的技術,而Hibernate就是這樣一個框架,以操作對象的方式操作數據庫。

四,hibernate相關API

configuration:配置對象

在使用hibernate的時候,首先要創建configuration的實例,Configuration實例主要用於啟動,加載,管理hibernate的配置文件信息,在啟動hibernate的過程中,configuration首先確定hibernate的配置文件的位置,然后讀取相關配置,最后創建一個唯一的SessionFactory實例,configuration值存在於最初的系統初始化階段,它將sessionFactory創建完成之后,就完成它的使命了.hibernate通常會使用new Configuration().configure(),來創建一個配置類對象,默認的是在resources下的hibernate.cfg.xml配置文件,如果不想創建和該文件名一樣的xml配置文件,可以在cofigure()中添加一個參數,參數的內容是配置文件的名稱

 sessionFactory 是session的工廠對象

sessionFactory接口負責將Hibernate的初始化和建立session對象,它在hibernate中起到一個緩沖區的作用,hibernate可以將自動生成的sql語句,映射數據以及某些可重復利用的數據放在這個緩沖區中,同時它還保存了對數據庫配置的所有映射關系,維護了當前的二級緩存

 

 

session對象

五,transaction事務

六,

1)什么是持久化類

 2)持久化的編寫規則

3)hibernate的主鍵生成策略

 

 

七,持久化狀態的三種描述

區分對象的三種狀態

hibernate三種轉態之間的相互轉換

 

 

持久化對象能夠自動更新數據庫

hibernate的一級緩存

什么是hibernate的一級緩存

測試一級緩存

 

 

一級緩存的快照

hibernate的事務控制

1)什么是事務

2)事務的四個特性

3)事務的並發問題

4)事務的隔離級別

 

5)事務管理

HQL

1)query

SQLQuery

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM