Hibernate--單表對映總結

爪哇島的流浪漢發表於2018-08-08

第一章 初識Hibernate

ORM 物件/關係對映(Object/Relationship Mapping) 

寫SQL語句的缺點:

*不同的資料庫使用的SQL語法不同

*同樣的功能在不同的資料庫中有不同的實現方式,比如分頁

*程式過分依賴SQL對程式的移植及擴充套件,維護等帶來很大的麻煩

 

Hibernate是Java領域的一款開源的ORM框架技術

Hibernate對JDBC進行了非常輕量級的物件封裝

其它主流的ORM框架技術:

1.MyBatis:前身就是著名的iBatis

2.Toplink:後被oracle收購,並重新包裝為Oracle AS TopLink

3.EJB:本身是JAVAEE的規範,重量級

開發前準備:外掛Hibernate Tools for Eclipse Plugins

Jboss公司推出的一個Eclipse綜合開發工具外掛,該外掛可以簡化ORM框架Hibernate

以及JBoss Seam,EJB3等的開發工作

第一個例子:建立Hibernate的配置檔案;建立持久化類;建立物件-關係對映檔案;通過Hibernate API編寫訪問資料庫的程式碼

匯入Hibernate必須的jar包 匯入Mysql的jdbc驅動 匯入junit架包

使用Junit進行測試 @Test:測試方法 @Before:初始化方法 @After:釋放資源  

 

第二章 Hibernate進階

hibernate.cfg.xml常用配置

hibernate.show_sql 是否把執行時的SQL語句輸出到控制檯,編碼階段便於測試

hibernate.format_sql輸出到控制檯的SQL語句是否進行排版,便於閱讀。建議設定true

hbm2ddl.auto可以幫助由java程式碼生成的資料庫指令碼,進而生成具體的表結構。create|update|create-drop|validate

hibernate.default_schema預設的資料庫

hibernate.dialect配置Hibernate資料庫方言,Hibernate可針對特殊的資料庫進行優化

<!-- 一次讀的資料庫記錄數 -->

<property name="hibernate.jdbc.fetch_size">50</property>

<!-- 設定對資料庫進行批量刪除 -->

<property name="hibernate.jdbc.batch_size">30</property>

hibernate.max_fetch_depth設定外連線抓取樹的最大深度取值. 建議設定為0到3之間

<property name="hibernate.connection.SetBigStringTryClob">true</property>

可以像操作String一樣操作CLOB

CLOB和BLOB的區別

CLOB使用CHAR來儲存資料。  如:儲存XML文件。

BLOB就是使用二進位制儲存資料。  如:儲存點陣圖。

session簡介

*hibernate執行流程

建立一個配置物件Configuration,用來讀取hibernate.cfg.xml配置文件

建立SessionFactory物件,載入相應的物件關係對映檔案

建立Session物件,相當於獲得了一個資料庫連線物件,可以執行session物件相應的方法(增刪改查)

開啟事務,執行完session的方法之後需要提交事務,最後關閉session

hibernate是對jdbc的封裝,不建議直接使用jdbc的connection運算元據庫,而是通過使用session運算元據庫。

session與connection是多對一的關係,每個session都有一個與之相對應的connection,一個connection不同時刻可以供多個session使用。

hibernate對資料的操作都是封裝在事務中,並且預設是非自動提交的方式。所以用session儲存物件時,如果不開啟事務,並且手工提交事務,物件並不會真正儲存在資料庫中。

openSession getCurrentSession

後者在事務提交或者回滾之後會自動關閉,前者openSession需要你手動關閉,如果使用openSession而沒有手動關閉,多次之後會導致連線池溢位。

openSession每次建立一個新物件。getCurrentSession使用現有的物件。

第三章 Hibernate單表操作

單一主鍵

assigned由java應用程式負責生成(手工賦值)

native由底層資料庫自動生成識別符號,如果是MySQL就是increment,如果是oracle就是sequence

基本型別

Hibernate對映型別     Java型別                                          描述

integer/int                   java.lang.Integer/int                           整型

date                            java.util.Date/java.sql.Date                代表日期:yyyy-MM-dd

time                             java.util.Date/java.sql.Date               代表時間:hh:mi:ss

timestamp                   java.util.Date/java.sql.Timestamp      代表時間和日期:yyyymmddhhmiss

物件型別                     java型別                                             描述

clob                             java.sql.Clob                                      大文字型別                            

blob                             java.sql.Blob                                      大二進位制資料檔案(音訊,視訊,圖片)

binary                          byte[]

text                              java.lang.String

Mysql不支援標準SQL的CLOB型別,在Mysql中,用text,mediumtext,longtext型別來表示超過長度為225的長文字資料。

元件屬性------實體類中的某個屬性屬於使用者自定義的類的物件 

總結Hibernate開發的基本步驟:

1)編寫配置文件hibernate.cfg.xml

2)編寫實體類

3)生成對應實體類的對映檔案並新增到配置檔案中

4)呼叫API的函式並測試

 

 

相關文章