1. 程式人生 > >Hibernate---實體配置(對映)檔案詳解 例如:User.hbm.xml檔案

Hibernate---實體配置(對映)檔案詳解 例如:User.hbm.xml檔案

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
    <!-- ORM元資料  表物件關係對映檔案 。        package : 配置該配置檔案中類所在的包.  -->


 <hibernate-mapping package="com.itheima.a_hello" >
              <!-- class: 配置實體與表的關係
                name : 填寫實體的完整

               table: 與實體對應
的名稱
              dynamic-insert:動態插入 預設值是false
                                    true=>如果欄位值為null,不參與insert語句

                   (例子:值為false   把使用者名稱新增到表中,密碼也會自動儲存到表中,參與insert語句)
              dynamic-update:動態更新  預設值"false"
                          true=> 沒改動過的屬性,將不會生成到update語句中         -->


     <class name="User" table="t_user"  >


         <!-- id: 配置實體與表中 id對應
             name: user物件中標識主鍵的
屬性名稱
             column: 主鍵在表中的
列名
             length: 列的資料長度
             unsaved-value(不常用): 指定主鍵為什麼值時,當做null來處理.
            access(強烈推薦不要用):field 那麼在操作屬性時,會直接操作對應的欄位而不是get/set方法      --> 

        <id name="id" column="id" length="255"   >       

                          <!--       generator:主鍵生成策略.     取值有7個。
                              1.increment  資料庫自己生成主鍵. 先從資料庫中查詢
最大的ID值,將ID值加1作為新的主鍵
                              2.identity  依賴於資料的主鍵自增功能
                              3.sequence    序列,依賴於資料中的序列功能(Oracle).
                              4.hilo(純瞭解,永遠用不到) : Hibernate自己實現序列的演算法,自己生成主鍵. (hilo演算法 )
                              5.native 自動根據資料庫判斷,三選一. identity|sequence|hilo
                              6.uuid  生成32位的不重複隨機字串當做主鍵
                              7.assigned 自己指定主鍵值. 表的主鍵是自然主鍵時使用.        -->

                       <generator class="uuid"></generator>
        </id>     


        <!-- property : 實體中屬性與表中列的對應
             name : 實體中屬性名稱
             column : 表中列的名稱
             length : 資料長度
             precision: 小數點後的精度
             scale:    有效位數
             insert(一般不用): 該屬性是否加入insert語句.
             update(一般不用): 該屬性是否加入update語句.
             not-null : 指定屬性的約束是否使用 非空
             unique : 指定屬性的約束是否使用 唯一                                     -->
        

         <!-- 
             type: 表達該屬性的型別
             可以用三種方式指定屬性
             java型別                  資料庫型別指定            Hibernate型別指定
             java.lang.String       varchar                             string                               --> 

        <property name="name" column="name" update="true" type="string" ></property>
        <property name="password" column="password"></property>
         <property name="sal" column="sal" precision="2" scale="3" ></property>
     </class>
 </hibernate-mapping>

 



type: 三種方式指定屬性 ---------   java型別               Hibernate型別指定           資料庫型別指定            

Java資料型別

Hibernate資料型別

標準SQL資料型別
(PS:對於不同的DB可能有所差異)

bytejava.lang.Byte

byte

TINYINT

shortjava.lang.Short

short

SMALLINT

intjava.lang.Integer

integer

INGEGER

longjava.lang.Long

long

BIGINT

floatjava.lang.Float

float

FLOAT

doublejava.lang.Double

double

DOUBLE

java.math.BigDecimal

big_decimal

NUMERIC

charjava.lang.Character

character

CHAR(1)

booleanjava.lang.Boolean

boolean

BIT

java.lang.String

string

VARCHAR

booleanjava.lang.Boolean

yes_no

CHAR(1)('Y''N')

booleanjava.lang.Boolean

true_false

CHAR(1)('Y''N')

java.util.Datejava.sql.Date

date

DATE

java.util.Datejava.sql.Time

time

TIME

java.util.Datejava.sql.Timestamp

timestamp

TIMESTAMP

java.util.Calendar

calendar

TIMESTAMP

java.util.Calendar

calendar_date

DATE

byte[]

binary

VARBINARYBLOB

java.lang.String

text

CLOB

java.io.Serializable

serializable

VARBINARYBLOB

java.sql.Clob

clob

CLOB

java.sql.Blob

blob

BLOB

java.lang.Class

class

VARCHAR

java.util.Locale

locale

VARCHAR

java.util.TimeZone

timezone

VARCHAR

java.util.Currency

currency

VARCHAR