mysql映射超_Hibernate的映射类型 hibernate mysql映射类型
(轉(zhuǎn))http://blog.csdn.net/zxy_snow/article/details/7214222
Hibernate的映射類型 hibernate mysql映射類型
1、Hibernate的映射類型 hibernate mysql映射類型
Hibernate 映射類型
Java 類型
標(biāo)準(zhǔn) SQL 類型
大小和取值范圍
integer 或者 int
int 或者 java.lang.Integer
INTEGER
4 字節(jié)
long
long? Long
BIGINT
8 字節(jié)
short
short? Short
SMALLINT
2 字節(jié)
byte
byte? Byte
TINYINT
1 字節(jié)
float
float? Float
FLOAT
4 字節(jié)
double
double? Double
DOUBLE
8 字節(jié)
big_decimal
java.math.BigDecimal
NUMERIC
NUMERIC(8,2)8 位
character
char? Character? String
CHAR(1)
定長(zhǎng)字符
string
String
VARCHAR
變長(zhǎng)字符串
boolean
boolean? Boolean
BIT
布爾類型
yes_no
boolean? Boolean
CHAR(1) (Y-N)
布爾類型
true_false
boolean? Boolean
CHAR(1) (T-F)
布爾類型
2 、 Java 時(shí)間和日期類型的 Hibernate 映射
映射類型
Java 類型
標(biāo)準(zhǔn) SQL 類型
描述
date
util.Date 或者 sql.Date
DATE
YYYY-MM-DD
time
Date??? Time
TIME
HH:MM:SS
timestamp
Date?? Timestamp
TIMESTAMP
YYYYMMDDHHMMSS
calendar
calendar
TIMESTAMP
YYYYMMDDHHMMSS
calendar_date
calendar
DATE
YYYY-MM-DD
3 、 Java 大對(duì)象類型的 Hibernate 映射類型
映射類型
Java 類型
標(biāo)準(zhǔn) SQL 類型
MySQL 類型
Oracle 類型
binary
byte[]
VARBINARY( 或 BLOB)
BLOB
BLOB
text
String
CLOB
TEXT
CLOB
serializable
Serializable 接口任意實(shí)現(xiàn)類
VARBINARY( 或 BLOB)
BLOB
BLOB
clob
java.sql.Clob
CLOB
TEXT
CLOB
blob
java.sql.Blob
BLOB
BLOB
BLOB
在程序中通過 Hibernate 來保存 java.sql.Clob 或者 java.sql.Blob 實(shí)例時(shí),必須包含兩個(gè)步驟:
在一個(gè)數(shù)據(jù)庫(kù)事務(wù)中先保存一個(gè)空的 Blob 或 Clob 實(shí)例。
接著鎖定這條記錄,更新上面保存的 Blob 或 Clob 實(shí)例,把二進(jìn)制數(shù)據(jù)或文本數(shù)據(jù)寫到 Blob 或 Clob 實(shí)例中
介紹MYSQL的數(shù)據(jù)類型了,畢竟為你想要的數(shù)據(jù)選定一個(gè)合適的類型,對(duì)于數(shù)據(jù)庫(kù)的存取效率有很大的改進(jìn)。
MYSQL數(shù)據(jù)庫(kù)有以下幾種類型:整數(shù)型(int,binint,smallint,tinyint等等xxxint型)、浮點(diǎn)型(float,double,real等)、定點(diǎn)數(shù)型(decimal,也就是傳說中的浮點(diǎn)型的字符串表達(dá)形式)、日期與時(shí)間型(data,time,datetime,timestamp),字符串型(char,varchar,text,tinytext,mediumtext,longtext等),二進(jìn)制型(tinyblob,tinyblob,blob等blob型),枚舉型(enum,set——set是類似于enum型)。
下面從整數(shù)型開始詳細(xì)介紹這些數(shù)型的基本信息:
整數(shù)型
默認(rèn)情況下,INT類型既包括正數(shù),也包括負(fù)數(shù),如果給INT列定義UNSIGNED屬性,那么它的取值范圍就永遠(yuǎn)是正數(shù)。這個(gè)永遠(yuǎn)是正數(shù),非常重要,即,如果你在對(duì)數(shù)據(jù)列操作:update tablename set int_field = (int_field - 1000 ),如果int_field的值小于1000,理論上是變成了負(fù)數(shù),但由于你設(shè)的屬性是UNSIGNED,那么存儲(chǔ)的數(shù)據(jù)仍然是無符號(hào)的正數(shù),這可能會(huì)給你帶來虛假或讓人困惑的結(jié)果。
TINYINT的取值范圍是從-128~+127,如果使用了UNSIGNED屬性,那么它的取值范圍就變成了0~+255。如果用戶試圖存入超過字段取值范圍的數(shù)字,MYSQL所做的工作就非常簡(jiǎn)單,它會(huì)直接替換成最大可取值或最小可取值。
或許有人注意到,我們?cè)谑褂胮hpmyadmin的時(shí)候,如果選擇INT類型,那么后面有一個(gè)可選長(zhǎng)度。不過,千萬不要被這個(gè)數(shù)值所迷惑,因?yàn)樗膶?shí)際功能并非指定該INT類型的長(zhǎng)度,而是最大顯示寬度(M:Maximum Display Width),僅僅用于查詢數(shù)據(jù)時(shí)可以把查詢結(jié)果按照你所指定的寬度進(jìn)行顯示,最主要的用途是為了排版需要。雖說是這樣,但在一些很少見的特定場(chǎng)合(MYSQL在執(zhí)行一些需要借助于臨時(shí)數(shù)據(jù)表才能完成的復(fù)雜查詢)里,臨時(shí)數(shù)據(jù)表的數(shù)值有可能會(huì)被截短并導(dǎo)致最終結(jié)果不正確。因此,除非你與數(shù)據(jù)庫(kù)所有的操作都在命令行下執(zhí)行,否則,還是建議留空。
INT 類型
該類型的實(shí)際含義
Tinyint(m)
8位整數(shù),占用1個(gè)字節(jié)(-128~+127)
smallint(m)
16位整數(shù),占用2個(gè)字節(jié)(-32768~+32767)
medimumint(m)
24位整數(shù),占用3個(gè)字節(jié)(-8388608~+8388607)
int(m),integer(m)
32位整數(shù),占用4個(gè)字節(jié)(-2147483648~+2147483647)
bigint(m)
64位整數(shù),占用8個(gè)字節(jié)(-9.22E+18 ~ +9.22E+18)
serial
這其實(shí)是bigint auto_increment not null primary key的簡(jiǎn)寫
上面tinyint(m)括號(hào)中的m,就是上文所指的最大顯示寬度。最后一個(gè)serial含義里的auto_increment,代表了該字段是自增字段,即,往有該屬性的字段里插數(shù)據(jù)時(shí),系統(tǒng)會(huì)自動(dòng)把該字段的當(dāng)前最大值加上1后存進(jìn)去。 一般而言,該屬性往往用于主鍵字段。在使用該屬性時(shí)應(yīng)當(dāng)注意以下幾個(gè)問題。
1、該屬性必須與NOT NULL、primary Key 或者 Unique屬性同時(shí)使用。
2、每個(gè)數(shù)據(jù)表只能存有一個(gè)auto_increment屬性的數(shù)據(jù)列
3、該屬性一般是在進(jìn)行數(shù)據(jù)插入時(shí),沒有明確指定值或者指定值為NULL時(shí),才起作用。如果指定了值,并且該值還沒有出現(xiàn)過,MYSQL將使用該值插入,以生成一條新記錄。這時(shí)候就有兩種情況:a)原有的數(shù)據(jù)是1~100,后來刪除了20~80的內(nèi)容,即數(shù)據(jù)庫(kù)里只存在1~19,81~100的數(shù)據(jù),當(dāng)插入ID為20的數(shù)據(jù)時(shí),數(shù)據(jù)庫(kù)還是會(huì)按照規(guī)則,把20這條記錄插進(jìn)去,并不會(huì)報(bào)錯(cuò),自增值仍然是100,下次正常插入時(shí),還是會(huì)默認(rèn)使用101這個(gè)值。b)原有的數(shù)據(jù)是1~100,我插入ID為1000的數(shù)據(jù)時(shí),不會(huì)報(bào)錯(cuò),但自增值變?yōu)?000,下次插入數(shù)據(jù)從1001起算。(啰嗦了點(diǎn),但應(yīng)該記住)
4、如果想知道剛剛插入的數(shù)據(jù)值是多少,在插入數(shù)據(jù)后,可以使用select last_insert_id()語句獲取。在PHP中,有一個(gè)函數(shù)是:mysql_insert_id(),該函數(shù)不是很建議使用,因?yàn)樗祷氐臄?shù)據(jù)是INT型,如果auto_increment所在的數(shù)據(jù)列類型是bigint,而且實(shí)際值已經(jīng)超過int類型最大值的話,mysql_insert_id()返回的值,將不正確。
5、如果auto_increment計(jì)數(shù)器達(dá)到了最大值(即該字段所允許的最大值),將不再遞增,因此數(shù)據(jù)插入將無法執(zhí)行。其實(shí)是到了最大值后,MYSQL會(huì)永遠(yuǎn)將該字段的最大值往數(shù)據(jù)庫(kù)里插,因此造成MYSQL報(bào):該數(shù)據(jù)列已存在的錯(cuò)誤。
6、如果在可行范圍內(nèi),或者預(yù)計(jì)數(shù)量會(huì)很大的情況下,盡量使用你想要設(shè)定的數(shù)據(jù)類型的再上一層類型,但盡量不要太夸張。比如你預(yù)計(jì)你的用戶數(shù)不會(huì)超過1000000萬,表面上medimum無符號(hào)已經(jīng)夠用了,但這時(shí)候,仍然建議你使用int型,以防萬一。
還有個(gè)BIT和BOOL,在MYSQL中,關(guān)鍵詞BOOL是TINYINT的同義詞,在5.0.2以及以前的版本中,BIT也是如此。但是從5.0.3開始,BIT不再是TINYINT的同義詞,而是一種可以存儲(chǔ)多達(dá)64位二進(jìn)制數(shù)值的新數(shù)據(jù)類型。這個(gè)在以后會(huì)單獨(dú)介紹,這里一筆帶過先。
總結(jié)
以上是生活随笔為你收集整理的mysql映射超_Hibernate的映射类型 hibernate mysql映射类型的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql enum_MySQL数据库中
- 下一篇: mysql utf8 bin设置_[my