新聞中心
在我們學(xué)習(xí)Hibernate時(shí)就知道,Hibernate映射類(lèi)型分為兩種:Hibernate內(nèi)置的映射類(lèi)型和Hibernate客戶化映射類(lèi)型。

為郟縣等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及郟縣網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為網(wǎng)站制作、成都網(wǎng)站制作、郟縣網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專(zhuān)業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!
內(nèi)置映射類(lèi)型負(fù)責(zé)把一些常見(jiàn)的Java類(lèi)型映射到相應(yīng)的SQL類(lèi)型;此外,Hibernate還允許用戶實(shí)現(xiàn)UserType或CompositeUserType接口,來(lái)靈活地定制客戶化映射類(lèi)型
1.Hibernate內(nèi)置映射類(lèi)型
1).Java基本類(lèi)型的Hibernate映射類(lèi)型
|
Java類(lèi)型 |
Hibernate映射類(lèi)型 |
標(biāo)準(zhǔn)SQL類(lèi)型 |
大小和取值范圍 |
|
int/Integer |
int/integer |
INTEGER |
4Byte |
|
long/Long |
long |
BIGINT |
8Byte |
|
short/Short |
short |
SAMLLINT |
2Byte |
|
byte/Byte |
byte |
TINYINT |
1Byte |
|
float/Float |
float |
FLOAT |
4Byte |
|
double/Double |
double |
DOUBLE |
8Byte |
|
BigDecimal |
big_decimal |
NUMBERIC |
Numeric(8,2) |
|
char/Character/String |
character |
CHAR(1) |
定長(zhǎng)字符 |
|
String |
string |
VARCHAR |
變長(zhǎng)字符 |
|
boolean/Boolean |
boolean |
BIT |
布爾類(lèi)型 |
|
boolean/Boolean |
yes/no |
CHAR(1)('Y'/'N') |
布爾類(lèi)型 |
|
boolean/Boolean |
true/false |
CHAR(1)('T'/'F') |
布爾類(lèi)型 |
2). Java時(shí)間和日期類(lèi)型的Hibernate映射類(lèi)型
|
Java類(lèi)型 |
Hibernate映射類(lèi)型 |
標(biāo)準(zhǔn)SQL類(lèi)型 |
描述 |
|
java.util.Date/java.sql.Date |
date |
DATE |
日期,yyyy-mm-dd |
|
java.util.Date/java.sql.TIme |
time |
TIME |
時(shí)間,hh:mm:ss |
|
java.util.Date/java.sql.Timestamp |
timestamp |
TIMESTAMP |
時(shí)間戳,yyyymmddhhmmss |
|
java.util.Calendar |
calendar |
TIMESTAMP |
同上 |
|
java.util.Calendar |
calendar_date |
DATE |
日期yyyy-mm-dd |
當(dāng)程序類(lèi)型為java.sql.Timestamp, 數(shù)據(jù)庫(kù)中表屬性類(lèi)型為timestamp的情況下,即使用戶以空值插入數(shù)據(jù),數(shù)據(jù)庫(kù)系統(tǒng)仍然會(huì)自動(dòng)填充timestamp的值
3). Java 大對(duì)象類(lèi)型的Hibernate映射類(lèi)型
|
Java類(lèi)型 |
Hibernate映射類(lèi)型 |
標(biāo)準(zhǔn)SQL類(lèi)型 |
MySql類(lèi)型 |
Oracle類(lèi)型 |
|
byte[] |
binary |
VARBINARY/BLOB |
BLOB |
BLOB |
|
String |
text |
CLOB |
TEXT |
CLOB |
|
serializable |
實(shí)現(xiàn)serializable接口的一個(gè)java類(lèi) |
VARBINARY/BLOB |
BLOB |
BLOB |
|
java.sql.Clob |
clob |
CLOB |
TEXT |
CLOB |
|
java.sql.Blob |
blob |
BLOB |
BLOB |
BLOB |
在應(yīng)用程序中通過(guò)Hibernate來(lái)保存java.sql.Clob或者java.sql.Blob實(shí)例時(shí),必須包含兩個(gè)步驟:
a. 在一個(gè)數(shù)據(jù)庫(kù)事務(wù)中先保存一個(gè)空的Blob或Clob實(shí)例;
b. 接著鎖定這條記錄,更新在步驟(1)中保存的Blob或Clob實(shí)例,把二進(jìn)制數(shù)據(jù)或長(zhǎng)文本數(shù)據(jù)寫(xiě)到Blob或Clob實(shí)例中。
- 1
- 2Session session = sessionFactory.openSession();
- 3Transaction tx = session.beginTransaction();
- 4Customer customer = new Customer();
- 5customer.setDescription(Hibernate.createClob("")); //先保存一個(gè)空的clob
- 6session.save(customer);
- 7session.flush();
- 8//鎖定這條記錄
- 9session.refresh(customer,LockMode.UPGRADE);
- 10oracle.sql.CLOB clob = (oracle.sql.CLOB) customer.getDescription();
- 11java.io.Writer pw = clob.getCharacterOutStream();
- 12pw.write(longText);//longText是一個(gè)長(zhǎng)度超過(guò)255的字符串
- 13pw.close();
- 14tx.commit();
- 15session.close();
一個(gè)java類(lèi)型對(duì)應(yīng)多個(gè)Hibernate映射類(lèi)型的場(chǎng)合。例如,如果持久化類(lèi)的屬性為java.util.Date類(lèi)型,對(duì)應(yīng)的Hibernate映射類(lèi)型可以是date,time
或timestamp。此時(shí)必須根據(jù)對(duì)應(yīng)的數(shù)據(jù)庫(kù)表的字段的SQL類(lèi)型,來(lái)確定Hibernate映射類(lèi)型。如果字段為Date類(lèi)型,則hibernate映射為datge,如果為T(mén)IME則為time,如果為T(mén)IMESTAMP則為timestamp。
2.客戶化映射類(lèi)型
(很麻煩的一個(gè)東西,稍微看了看,日后需要再研究并總結(jié))
【編輯推薦】
- 簡(jiǎn)述Hibernate中加載并存儲(chǔ)對(duì)象
- Hibernate傳播性持久化攻略
- 深入了解Hibernate自動(dòng)狀態(tài)檢測(cè)
- 教你如何在Hibernate中實(shí)例化集合和代理
- Hinerbate單端關(guān)聯(lián)代理頗析
本文名稱(chēng):簡(jiǎn)述Hibernate幾種映射類(lèi)型
URL網(wǎng)址:http://www.dlmjj.cn/article/djdhocj.html


咨詢(xún)
建站咨詢(xún)
