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