Hibernate基础学习(二)—Hibernate相关API介绍
一、Hibernate的核心接口
???? 所有的Hibernate應用中都會訪問Hibernate的5個核心接口。
???? (1)Configuration接口: 配置Hibernate,啟動Hibernate,創建SessionFactory對象。
???? (2)SessionFactory接口: 初始化Hibernate,創建Session。
???? (3)Session接口: 負責保存、更新、刪除、加載和查詢對象。
???? (4)Transaction接口: 管理事務。
???? (5)Query和Criteria接口: 執行數據庫查詢。
????
?
1.Configuration接口
???? Configuration對象用于配置并且根啟動Hibernate。Hibernate應用通過Configuration實例來獲取對象-關系映射文件中的元數據,以及動態配置Hibernate的屬性,然后創建SessionFactory實例。
Configuration 類負責管理 Hibernate 的配置信息。如下:?
Hibernate 運行的底層信息: 數據庫的URL、用戶名、密碼、JDBC驅動類,數據庫Dialect,數據庫連接池等(對應 hibernate.cfg.xml 文件)。?
持久化類與數據表的映射關系: (*.hbm.xml 文件)。
創建Configuration的兩種方式:
???? 方式1: 屬性文件-hibernate.properties
Configuration cfg = new Configuration();???? 方式2: XML文件-hibernate.cfg.xml
Configuration cfg = new Configuration().configure();???? configure()方法還支持帶參數的訪問。
File file = new File(“simpleit.xml”); Configuration cfg = new Configuration().configure(file);?
2.SessionFactory接口
??? 一個SessionFactory實例對應一個數據存儲源,應用從SessionFactory獲得Session實例。SessionFactory有以下特點:
(1)它是線程安全的。這意味著它的同一個實例可以被應用的多個線程共享。
(2)它是重量級的。這意味著不能隨意的創建或銷毀它的實例,如果應用只訪問一個數據庫,只需要創建一個SessionFactory實例,在應用初始化的時候創建該實例。如果應用同時訪問多個數據庫,則需要為每個數據庫創建一個單獨的SessionFactory實例。
???? 之所以稱SessionFactory是重量級的是因為它需要一個很大的緩存,用來存放預定義的SQL語句及映射元數據等。用戶還可以為SessionFactory配置一個緩存插件,這個緩存插件被稱為Hibernate的第二級緩存,該緩存用來存放被工作單元讀過的數據,其他工作單元可能會重用這些數據,因此緩存中的數據能夠被所有的工作單元共享。一個工作單元通常對應一個數據庫事務。
?
3.Session接口
???? Session接口是Hibernate使用最廣泛的接口。Session也被稱為持久化管理器,它提供了和持久化相關的操作,如保存、更新、刪除、加載和查詢對象。
Session有以下特點:
(1)不是線程安全的。因此在設計時,應該避免多個線程共享同一個Session實例。
(2)Session實例是輕量級的。所謂輕量級指的是它的創建和銷毀不需要消耗太大的資源。這意味這在程序中可以經常的創建或銷毀Session對象,如為每個客戶請求分配單獨的Session實例。
???? Session有一個緩存,被稱為Hibernate的第一級緩存,它存放在當前工作單元加載的對象。每個Session實例都有自己的緩存,這個Session實例的緩存只能被當前工作單元訪問。
?
4.Transaction接口
???? Transaction接口是Hibernate數據庫事務接口,它對底層的事務接口做了封裝,底層事務接口包括:
???? (1)JDBC API
???? (2)JTA(Java Transaction API)
???? (3)CORBA(Common Object Request Broker Architecture )API
???? Hibernate應用可以通過一致的Transaction接口來聲明事務,這有助于應用在不同環境或容器中移植。
????
?
5.Query和Criteria接口
???? Query和Criteria接口是Hibernate的查詢接口,用于向數據庫查詢對象,以及控制執行查詢的過程。Query實例包裝了一個HQL查詢語句,HQL查詢語句與SQL查詢語句有些相似,但HQL查詢語句是面向對象的,它引用類名和類的屬性名,而不是表名和字段名。Criteria接口完全封裝了基于字符串形式的查詢語句,比Query接口更加面向對象,Criteria接口擅長執行動態查詢。
?
二、主配置文件
???? Hibernate配置文件主要用于配置數據庫連接和Hibernate運行時所需的各種屬性。
<?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><!-- SessionFactory相當于連接池的配置 --><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">123456</property><!-- Hibernate 的基本配置 --><!-- Hibernate 使用的數據庫方言 --><property name="dialect">org.hibernate.dialect.MySQLDialect</property><!-- 運行時是否打印 SQL --><property name="show_sql">true</property><!-- 運行時是否格式化 SQL --><property name="format_sql">false</property><!-- 是否自動創建表create: 每次加載hibernate時都會刪除上一次的生成的表,然后根據你的model類再重新來生成新表,哪怕兩次沒有任何改變也要這樣執行。update: 表不存在就創建,不一樣就更新,一樣就什么都不做。create-drop: 初始化時創建表,SessionFactory執行clost()時刪除表。validate:驗證表結構是否一致,如果不一致就拋異常。--><property name="hbm2ddl.auto">update</property><!-- 添加映射文件 --><mapping resource="com/kiwi/domain/User.hbm.xml" /></session-factory></hibernate-configuration>常見屬性
(1)show_sql: 運行時是否打印sql語句。
(2)format_sql: 運行時是否格式化sql語句。
(3)hbm2ddl.auto: 是否自動創建表,它有四個取值。
????????????? create: 先刪除表,然后再新建表,容易丟失數據。
???????????? update: 表不存在時就創建,表結構不一樣時就更新,否則不做任何操作。
?????? create-drop: 初始化時創建表,SessionFactory關閉時刪除表。
?????????? validate: 驗證表結構是否一致,如果不一致就報錯。
?
三、生成表
???? 生成表結構有兩種方式:
???? (1)配置hbm2ddl.auto屬性在主配置文件中
???? (2)使用SchemaExport工具類。
@Testpublic void testExport(){Configuration config = new Configuration().configure();SchemaExport se = new SchemaExport(config);/** 第一個參數: 是否把DDL語句打印的控制臺* 第二個參數: 是否讓數據庫執行*/se.create(true,true);}轉載于:https://www.cnblogs.com/yangang2013/p/5499090.html
總結
以上是生活随笔為你收集整理的Hibernate基础学习(二)—Hibernate相关API介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 公积金月冲规则
- 下一篇: LOLs11雪人努努最恶心出装 打野出装