hibernate 配置數據庫方言的實現方法

本文主要介紹瞭hibernate 配置數據庫方言的實現方法,分享給大傢,具體如下:

RDBMS 方言
DB2 org.hibernate.dialect.DB2Dialect
DB2 AS/400 org.hibernate.dialect.DB2400Dialect
DB2 OS390 org.hibernate.dialect.DB2390Dialect
PostgreSQL org.hibernate.dialect.PostgreSQLDialect
MySQL org.hibernate.dialect.MySQLDialect
MySQL with InnoDB org.hibernate.dialect.MySQLInnoDBDialect
MySQL with MyISAM org.hibernate.dialect.MySQLMyISAMDialect
Oracle (any version) org.hibernate.dialect.OracleDialect
Oracle 9i/10g org.hibernate.dialect.Oracle9Dialect
Sybase org.hibernate.dialect.SybaseDialect
Sybase Anywhere org.hibernate.dialect.SybaseAnywhereDialect
Microsoft SQL Server org.hibernate.dialect.SQLServerDialect
SAP DB org.hibernate.dialect.SAPDBDialect
Informix org.hibernate.dialect.InformixDialect
HypersonicSQL org.hibernate.dialect.HSQLDialect
Ingres org.hibernate.dialect.IngresDialect
Progress org.hibernate.dialect.ProgressDialect
Mckoi SQL org.hibernate.dialect.MckoiDialect
Interbase org.hibernate.dialect.InterbaseDialect
Pointbase org.hibernate.dialect.PointbaseDialect
FrontBase org.hibernate.dialect.FrontbaseDialect
Firebird org.hibernate.dialect.FirebirdDialect

在開發hibernate的程序時,需要進行SessionFactory的配置,簡單地說,也就是建立與數據庫之間連接的配置,在hibernate中一般使用xml文件來進行配置,但是在該文件的配置中需要設置dialect方言屬性值,對於不同的數據庫,方言的值dialect是不同的,那麼下面就列出在不同的數據庫中如何設置該dialect值(參見下表):    

我的第一個hibernate程序就是方言出的問題:

MySQL with InnoDB org.hibernate.dialect.MySQLInnoDBDialect

MySQL                         org.hibernate.dialect.MySQLDialect

MySQLInnoDBDialect和MySQLMyISAMDialect的差別

(註:MySQLInnoDBDialect與MySQLMyISAMDialect繼承自MySQLDialect。)
       InnoDB和MyISAM是MySQL最重要的兩種數據存儲引擎,兩者都可用來存儲表和索引,各有優缺點,視具體應用而定。

基本的差別為:

MyISAM 類型不支持事務處理等高級處理,而InnoDB類型支持。

MyISAM類型的表強調的是性能,其執行數度比InnoDB類型更快,但是不提供事務支持,而 InnoDB提供事務支持以及外部鍵等高級數據庫功能。

InnoDB 給 MySQL 提供瞭具有事務(commit)、回滾(rollback)和崩潰修復能力(crash recovery capabilities)、多版本並發控制(multi-versioned concurrency control)的事務安全(transaction-safe (ACID compliant))型表。InnoDB 提供瞭行級鎖(locking on row level),提供與 Oracle 類似的不加鎖讀取(non-locking read in SELECTs)。InnoDB鎖定在行級並且也在SELECT語句提供一個Oracle風格一致的非鎖定讀。另外InnoDB是為處理巨大數據量時的最 大性能設計。它的CPU效率可能是任何其它基於磁盤的關系數據庫引擎所不能匹敵的。MySQLInnoDBDialect基於上也就有InnoDB相同的功能.

InnoDB存儲引擎被完全與MySQL服務器整合,InnoDB存儲引擎為在主內存中緩存數據和索引而維持它自己的緩沖池。 InnoDB存儲它的表&索引在一個表空間中,表空間可以包含數個文件(或原始磁盤分區)。這與MyISAM表不同,比如在MyISAM表中每個表被存在 分離的文件中。InnoDB 表可以是任何尺寸,即使在文件尺寸被限制為2GB的操作系統上。

InnoDB是事務安全的.它與BDB類型具有相同的特性,它們還支持外鍵.InnoDB表格速度很快.具有比BDB還豐富的特性,因此如果需要一個事務 安全的存儲引擎,建議使用它.如果你的數據執行大量的INSERT或UPDATE,出於性能方面的考慮,應該使用InnoDB表。

在 https://www.mysql.com/上可以找到 InnoDB 最新的信息。InnoDB 手冊的最新版本總是被放置在那裡,並且在那裡可以得到 InnoDB 的商業許可(order commercial licenses)以及支持。

MyISAM是MySQL默認存儲引擎。每個MyISAM在磁盤上存儲成三個文件。第一個文件的名字以表的名字開始,擴展名指出文件類型。.frm文件存儲表定義。數據文件的擴展名為.MYD (MYData)。索引文件的擴展名是.MYI (MYIndex)。

MyISAM基於傳統的ISAM類型,ISAM是Indexed Sequential Access Method (有索引的順序訪問方法) 的縮寫,它是存儲記錄和文件的標準方法.與其他存儲引擎比較,MyISAM具有檢查和修復表格的大多數工具. MyISAM表格可以被壓縮,而且它們支持全文搜索.它們不是事務安全的,而且也不支持外鍵。如果事物回滾將造成不完全回滾,不具有原子性。如果執行大量 的SELECT,MyISAM是更好的選擇。

MyIASM是IASM表的新版本,有如下擴展:

  • 二進制層次的可移植性。
  • NULL列索引。
  • 對變長行比ISAM表有更少的碎片。
  • 支持大文件。
  • 更好的索引壓縮。
  • 更好的鍵碼統計分佈。
  • 更好和更快的auto_increment處理。

下面是已知的兩者之間的差別,僅供參考。

1.InnoDB不支持FULLTEXT類型的索引。
2.InnoDB 中不保存表的具體行數,也就是說,執行select count(*) from table時,InnoDB要掃描一遍整個表來計算有多少行,但是MyISAM隻要簡單的讀出保存好的行數即可。註意的是,當count(*)語句包含 where條件時,兩種表的操作是一樣的。
3.對於AUTO_INCREMENT類型的字段,InnoDB中必須包含隻有該字段的索引,但是在MyISAM表中,可以和其他字段一起建立聯合索引。
4.DELETE FROM table時,InnoDB不會重新建立表,而是一行一行的刪除。
5.LOAD TABLE FROM MASTER操作對InnoDB是不起作用的,解決方法是首先把InnoDB表改成MyISAM表,導入數據後再改成InnoDB表,但是對於使用的額外的InnoDB特性(例如外鍵)的表不適用。
另外,InnoDB表的行鎖也不是絕對的,如果在執行一個SQL語句時MySQL不能確定要掃描的范圍,InnoDB表同樣會鎖全表,例如update table set num=1 where name like “�a%”。
任何一種表都不是萬能的,隻用恰當的針對業務類型來選擇合適的表類型,才能最大的發揮MySQL的性能優勢。

到此這篇關於hibernate 配置數據庫方言的實現方法的文章就介紹到這瞭,更多相關hibernate 配置數據庫方言內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: