hibernate的映射類型 hibernate MySQL映射類型php
一、Hibernate的映射類型 hibernate mysql映射類型java
Hibernate 映射類型mysql |
Java 類型sql |
標準 SQL 類型數據庫 |
大小和取值範圍oracle |
integer 或者 int函數 |
int 或者 java.lang.Integerspa |
INTEGER.net |
4 字節hibernate |
long |
long Long |
BIGINT |
8 字節 |
short |
short Short |
SMALLINT |
2 字節 |
byte |
byte Byte |
TINYINT |
1 字節 |
float |
float Float |
FLOAT |
4 字節 |
double |
double Double |
DOUBLE |
8 字節 |
big_decimal |
java.math.BigDecimal |
NUMERIC |
NUMERIC(8,2)8 位 |
character |
char Character String |
CHAR(1) |
定長字符 |
string |
String |
VARCHAR |
變長字符串 |
boolean |
boolean Boolean |
BIT |
布爾類型 |
yes_no |
boolean Boolean |
CHAR(1) (Y-N) |
布爾類型 |
true_false |
boolean Boolean |
CHAR(1) (T-F) |
布爾類型 |
2 、 Java 時間和日期類型的 Hibernate 映射
映射類型 |
Java 類型 |
標準 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 大對象類型的 Hibernate 映射類型
映射類型 |
Java 類型 |
標準 SQL 類型 |
MySQL 類型 |
Oracle 類型 |
binary |
byte[] |
VARBINARY( 或 BLOB) |
BLOB |
BLOB |
text |
String |
CLOB |
TEXT |
CLOB |
serializable |
Serializable 接口任意實現類 |
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 實例時,必須包含兩個步驟:
在一個數據庫事務中先保存一個空的 Blob 或 Clob 實例。
接着鎖定這條記錄,更新上面保存的 Blob 或 Clob 實例,把二進制數據或文本數據寫到 Blob 或 Clob 實例中
介紹MYSQL的數據類型了,畢竟爲你想要的數據選定一個合適的類型,對於數據庫的存取效率有很大的改進。
MYSQL數據庫有如下幾種類型:整數型(int,binint,smallint,tinyint等等xxxint型)、浮點型(float,double,real等)、定點數型(decimal,也就是傳說中的浮點型的字符串表達形式)、日期與時間型(data,time,datetime,timestamp),字符串型(char,varchar,text,tinytext,mediumtext,longtext等),二進制型(tinyblob,tinyblob,blob等blob型),枚舉型(enum,set——set是相似於enum型)。
下面從整數型開始詳細介紹這些數型的基本信息:
整數型
默認狀況下,INT類型既包括正數,也包括負數,若是給INT列定義UNSIGNED屬性,那麼它的取值範圍就永遠是正數。這個永遠是正數,很是重要,即,若是你在對數據列操做:update tablename set int_field = (int_field - 1000 ),若是int_field的值小於1000,理論上是變成了負數,但因爲你設的屬性是UNSIGNED,那麼存儲的數據仍然是無符號的正數,這可能會給你帶來虛假或讓人困惑的結果。
TINYINT的取值範圍是從-128~+127,若是使用了UNSIGNED屬性,那麼它的取值範圍就變成了0~+255。若是用戶試圖存入超過字段取值範圍的數字,MYSQL所作的工做就很是簡單,它會直接替換成最大可取值或最小可取值。
或許有人注意到,咱們在使用phpmyadmin的時候,若是選擇INT類型,那麼後面有一個可選長度。不過,千萬不要被這個數值所迷惑,由於它的實際功能並不是指定該INT類型的長度,而是最大顯示寬度(M:Maximum Display Width),僅僅用於查詢數據時能夠把查詢結果按照你所指定的寬度進行顯示,最主要的用途是爲了排版須要。雖然說是這樣,但在一些不多見的特定場合(MYSQL在執行一些須要藉助於臨時數據表才能完成的複雜查詢)裏,臨時數據表的數值有可能會被截短並致使最終結果不正確。所以,除非你與數據庫全部的操做都在命令行下執行,不然,仍是建議留空。
INT 類型 |
該類型的實際含義 |
Tinyint(m) |
8位整數,佔用1個字節(-128~+127) |
smallint(m) |
16位整數,佔用2個字節(-32768~+32767) |
medimumint(m) |
24位整數,佔用3個字節(-8388608~+8388607) |
int(m),integer(m) |
32位整數,佔用4個字節(-2147483648~+2147483647) |
bigint(m) |
64位整數,佔用8個字節(-9.22E+18 ~ +9.22E+18) |
serial |
這實際上是bigint auto_increment not null primary key的簡寫 |
上面tinyint(m)括號中的m,就是上文所指的最大顯示寬度。最後一個serial含義裏的auto_increment,表明了該字段是自增字段,即,往有該屬性的字段裏插數據時,系統會自動把該字段的當前最大值加上1後存進去。 通常而言,該屬性每每用於主鍵字段。在使用該屬性時應當注意如下幾個問題。
一、該屬性必須與NOT NULL、primary Key 或者 Unique屬性同時使用。
二、每一個數據表只能存有一個auto_increment屬性的數據列
三、該屬性通常是在進行數據插入時,沒有明確指定值或者指定值爲NULL時,才起做用。若是指定了值,而且該值尚未出現過,MYSQL將使用該值插入,以生成一條新記錄。這時候就有兩種狀況:a)原有的數據是1~100,後來刪除了20~80的內容,即數據庫裏只存在1~19,81~100的數據,當插入ID爲20的數據時,數據庫仍是會按照規則,把20這條記錄插進去,並不會報錯,自增值仍然是100,下次正常插入時,仍是會默認使用101這個值。b)原有的數據是1~100,我插入ID爲1000的數據時,不會報錯,但自增值變爲1000,下次插入數據從1001起算。(囉嗦了點,但應該記住)
四、若是想知道剛剛插入的數據值是多少,在插入數據後,可使用select last_insert_id()語句獲取。在PHP中,有一個函數是:mysql_insert_id(),該函數不是很建議使用,由於它返回的數據是INT型,若是auto_increment所在的數據列類型是bigint,並且實際值已經超過int類型最大值的話,mysql_insert_id()返回的值,將不正確。
五、若是auto_increment計數器達到了最大值(即該字段所容許的最大值),將再也不遞增,所以數據插入將沒法執行。實際上是到了最大值後,MYSQL會永遠將該字段的最大值往數據庫裏插,所以形成MYSQL報:該數據列已存在的錯誤。
六、若是在可行範圍內,或者預計數量會很大的狀況下,儘可能使用你想要設定的數據類型的再上一層類型,但儘可能不要太誇張。好比你預計你的用戶數不會超過1000000萬,表面上medimum無符號已經夠用了,但這時候,仍然建議你使用int型,以防萬一。
還有個BIT和BOOL,在MYSQL中,關鍵詞BOOL是TINYINT的同義詞,在5.0.2以及之前的版本中,BIT也是如此。可是從5.0.3開始,BIT再也不是TINYINT的同義詞,而是一種能夠存儲多達64位二進制數值的新數據類型。這個在之後會單獨介紹,這裏一筆帶過先。