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!
推薦閱讀:
- 詳解MySQL數據庫千萬級數據查詢和存儲
- 解決springboot啟動失敗的問題('hibernate.dialect' not set)
- mysql查詢優化之100萬條數據的一張表優化方案
- Java面試題沖刺第四天–數據庫
- MySQL COUNT(*)性能原理詳解