hibernate mysql映射類型

來源:互聯網
上載者:User

Hibernate的映射類型 hibernate mysql映射類型

1、Hibernate的映射類型 hibernate mysql映射類型

Hibernate 映射類型

Java 類型

標準 SQL 類型

大小和取值範圍

integer 或者 int

int 或者 java.lang.Integer

INTEGER

4 位元組

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後存進去。 一般而言,該屬性往往用於主鍵欄位。在使用該屬性時應當注意以下幾個問題。
1、該屬性必須與NOT NULL、primary Key 或者 Unique屬性同時使用。
2、每個資料表只能存有一個auto_increment屬性的資料列
3、該屬性一般是在進行資料插入時,沒有明確指定值或者指定值為NULL時,才起作用。如果指定了值,並且該值還沒有出現過,MYSQL將使用該值插入,以產生一條新記錄。這時候就有兩種情況:a)原有的資料是1~100,後來刪除了20~80的內容,即資料庫裡只存在1~19,81~100的資料,當插入ID為20的資料時,資料庫還是會按照規則,把20這條記錄插進去,並不會報錯,自增值仍然是100,下次正常插入時,還是會預設使用101這個值。b)原有的資料是1~100,我插入ID為1000的資料時,不會報錯,但自增值變為1000,下次插入資料從1001起算。(囉嗦了點,但應該記住)
4、如果想知道剛剛插入的資料值是多少,在插入資料後,可以使用select last_insert_id()語句擷取。在PHP中,有一個函數是:mysql_insert_id(),該函數不是很建議使用,因為它返回的資料是INT型,如果auto_increment所在的資料列類型是bigint,而且實際值已經超過int類型最大值的話,mysql_insert_id()返回的值,將不正確。
5、如果auto_increment計數器達到了最大值(即該欄位所允許的最大值),將不再遞增,因此資料插入將無法執行。其實是到了最大值後,MYSQL會永遠將該欄位的最大值往資料庫裡插,因此造成MYSQL報:該資料列已存在的錯誤。
6、如果在可行範圍內,或者預計數量會很大的情況下,盡量使用你想要設定的資料類型的再上一層類型,但盡量不要太誇張。比如你預計你的使用者數不會超過1000000萬,表面上medimum無符號已經夠用了,但這時候,仍然建議你使用int型,以防萬一。

還有個BIT和BOOL,在MYSQL中,關鍵詞BOOL是TINYINT的同義字,在5.0.2以及以前的版本中,BIT也是如此。但是從5.0.3開始,BIT不再是TINYINT的同義字,而是一種可以儲存多達64位位元值的新資料類型。這個在以後會單獨介紹,這裡一筆帶過先。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.