- 資訊首頁(yè) > 開(kāi)發(fā)技術(shù) >
- hibernate 配置數據庫方言的實(shí)現方法
本文主要介紹了hibernate 配置數據庫方言的實(shí)現方法,分享給大家,具體如下:
在開(kāi)發(fā)hibernate的程序時(shí),需要進(jìn)行SessionFactory的配置,簡(jiǎn)單地說(shuō),也就是建立與數據庫之間連接的配置,在hibernate中一般使用xml文件來(lái)進(jìn)行配置,但是在該文件的配置中需要設置dialect方言屬性值,對于不同的數據庫,方言的值dialect是不同的,那么下面就列出在不同的數據庫中如何設置該dialect值(參見(jiàn)下表):
我的第一個(gè)hibernate程序就是方言出的問(wèn)題:
MySQL with InnoDB org.hibernate.dialect.MySQLInnoDBDialect
MySQL org.hibernate.dialect.MySQLDialect
(注:MySQLInnoDBDialect與MySQLMyISAMDialect繼承自MySQLDialect。)
InnoDB和MyISAM是MySQL最重要的兩種數據存儲引擎,兩者都可用來(lái)存儲表和索引,各有優(yōu)缺點(diǎn),視具體應用而定。
基本的差別為:
MyISAM 類(lèi)型不支持事務(wù)處理等高級處理,而InnoDB類(lèi)型支持。
MyISAM類(lèi)型的表強調的是性能,其執行數度比InnoDB類(lèi)型更快,但是不提供事務(wù)支持,而 InnoDB提供事務(wù)支持以及外部鍵等高級數據庫功能。
InnoDB 給 MySQL 提供了具有事務(wù)(commit)、回滾(rollback)和崩潰修復能力(crash recovery capabilities)、多版本并發(fā)控制(multi-versioned concurrency control)的事務(wù)安全(transaction-safe (ACID compliant))型表。InnoDB 提供了行級鎖(locking on row level),提供與 Oracle 類(lèi)似的不加鎖讀取(non-locking read in SELECTs)。InnoDB鎖定在行級并且也在SELECT語(yǔ)句提供一個(gè)Oracle風(fēng)格一致的非鎖定讀。另外InnoDB是為處理巨大數據量時(shí)的最 大性能設計。它的CPU效率可能是任何其它基于磁盤(pán)的關(guān)系數據庫引擎所不能匹敵的。MySQLInnoDBDialect基于上也就有InnoDB相同的功能.
InnoDB存儲引擎被完全與MySQL服務(wù)器整合,InnoDB存儲引擎為在主內存中緩存數據和索引而維持它自己的緩沖池。 InnoDB存儲它的表&索引在一個(gè)表空間中,表空間可以包含數個(gè)文件(或原始磁盤(pán)分區)。這與MyISAM表不同,比如在MyISAM表中每個(gè)表被存在 分離的文件中。InnoDB 表可以是任何尺寸,即使在文件尺寸被限制為2GB的操作系統上。
InnoDB是事務(wù)安全的.它與BDB類(lèi)型具有相同的特性,它們還支持外鍵.InnoDB表格速度很快.具有比BDB還豐富的特性,因此如果需要一個(gè)事務(wù) 安全的存儲引擎,建議使用它.如果你的數據執行大量的INSERT或UPDATE,出于性能方面的考慮,應該使用InnoDB表。
在 上可以找到 InnoDB 最新的信息。InnoDB 手冊的最新版本總是被放置在那里,并且在那里可以得到 InnoDB 的商業(yè)許可(order commercial licenses)以及支持。
MyISAM是MySQL默認存儲引擎。每個(gè)MyISAM在磁盤(pán)上存儲成三個(gè)文件。第一個(gè)文件的名字以表的名字開(kāi)始,擴展名指出文件類(lèi)型。.frm文件存儲表定義。數據文件的擴展名為.MYD (MYData)。索引文件的擴展名是.MYI (MYIndex)。
MyISAM基于傳統的ISAM類(lèi)型,ISAM是Indexed Sequential Access Method (有索引的順序訪(fǎng)問(wèn)方法) 的縮寫(xiě),它是存儲記錄和文件的標準方法.與其他存儲引擎比較,MyISAM具有檢查和修復表格的大多數工具. MyISAM表格可以被壓縮,而且它們支持全文搜索.它們不是事務(wù)安全的,而且也不支持外鍵。如果事物回滾將造成不完全回滾,不具有原子性。如果執行大量 的SELECT,MyISAM是更好的選擇。
MyIASM是IASM表的新版本,有如下擴展:
下面是已知的兩者之間的差別,僅供參考。
1.InnoDB不支持FULLTEXT類(lèi)型的索引。
2.InnoDB 中不保存表的具體行數,也就是說(shuō),執行select count(*) from table時(shí),InnoDB要掃描一遍整個(gè)表來(lái)計算有多少行,但是MyISAM只要簡(jiǎn)單的讀出保存好的行數即可。注意的是,當count(*)語(yǔ)句包含 where條件時(shí),兩種表的操作是一樣的。
3.對于A(yíng)UTO_INCREMENT類(lèi)型的字段,InnoDB中必須包含只有該字段的索引,但是在MyISAM表中,可以和其他字段一起建立聯(lián)合索引。
4.DELETE FROM table時(shí),InnoDB不會(huì )重新建立表,而是一行一行的刪除。
5.LOAD TABLE FROM MASTER操作對InnoDB是不起作用的,解決方法是首先把InnoDB表改成MyISAM表,導入數據后再改成InnoDB表,但是對于使用的額外的InnoDB特性(例如外鍵)的表不適用。
另外,InnoDB表的行鎖也不是絕對的,如果在執行一個(gè)SQL語(yǔ)句時(shí)MySQL不能確定要掃描的范圍,InnoDB表同樣會(huì )鎖全表,例如update table set num=1 where name like “�a%”。
任何一種表都不是萬(wàn)能的,只用恰當的針對業(yè)務(wù)類(lèi)型來(lái)選擇合適的表類(lèi)型,才能最大的發(fā)揮MySQL的性能優(yōu)勢。
到此這篇關(guān)于hibernate 配置數據庫方言的實(shí)現方法的文章就介紹到這了,更多相關(guān)hibernate 配置數據庫方言?xún)热菡埶阉髂_本之家以前的文章或繼續瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自互聯(lián)網(wǎng)轉載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權請聯(lián)系QQ:712375056 進(jìn)行舉報,并提供相關(guān)證據,一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容。
Copyright ? 2009-2021 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 珠海市特網(wǎng)科技有限公司 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站