3.Hibernate基礎配置

來源:互聯網
上載者:User

標籤:定義類   alt   format   建表   控制台   property   cto   class   orm   

1.Hibernate.cfg.xml:hbm2ddl.auto  

   在SessionFactory建立時,自動檢查資料庫結構,或者將資料庫schema的DDL匯出到資料庫

  <property name="hbm2ddl.auto">create</property>  除了 create 還有其他取值,可以去查文檔

  a)先建表還是先建實體類 (理論先類,實際先表)

2.搭建日誌環境並配置顯示DDL語句(資料庫定義語言:直接提交的)(就是SQL語句)

  使用slf介面 ,然後使用log4j的實現(slf是一個規範,一個標準,類似於介面,類似的標準還有JPA,JDBC等)

    a)首先引入 slf-api-1.5.8.jar  這個介面標準 

    b)然後引入log4j(log4j-1.2.14.jar)

    c)然後再引入slf4j實現LOG4J的適配器jar包(slf4j-log4j12-1.5.8.jar)  (這裡體現了適配器模式)

    d)最後建立log4j的設定檔(log4j.properties),並加以修改,只要保留

適配器模式將一個類的介面轉換成客戶期望的另一個介面,讓原本不相容的介面可以合作無間。

原本 slf 介面  和  log4j 介面是不相容的,但是這裡通過slf4j-log4j12-1.5.8.jar,將 log4j中的介面 轉換成 符合 slf 標準的介面

JDBC也是類似,只提供了一個標準,mysql 和 oracle 都要使用相應的jar包,使其能夠適配JDBC這個標準

 

3.hibernate.cfg.xml:show_sql    是否輸出所有語句到控制台

           format_sql 是否在log 和 console中 列印出更漂亮的SQL

 

4.表名和類名不同,如何對錶名進行配置 (預設加了@Entity的類名就是表名)

  1.Annotation:使用@Table(name="tableName") 進行註解
  2.xml:<class name="Student" table="t_student">

 

5.欄位名和屬性名稱相同

  1.Annotation:預設為@Basic (如果成員屬性沒有加入任何註解,則預設在前面加入了@Basic)

  2.xml中不需要寫 column

6.欄位名和屬性名稱不同

  1.Annotation:使用@Column(name="columnName") 進行註解

  2.xml:<property name="name" column="_name"/>

7.不需要持久化的欄位 (即實體類某個成員屬性不打算儲存在DB中)

  1.Annotation:使用@Transient 進行註解就可以了

  2.xml:不寫就可以(就是不需要對這個成員屬性進行映射)

8.映射日期與時間類型,指定時間精度(資料庫中存的資料的類型)
  1.Annotation:使用Temporal(value=TemporalType) 來註解表示日期和時間
    其中Temporal 有三個值:Temporal.TIMESTAMP 表示 yyyy-MM-dd HH:mm:ss
                 Temporal.DATE 表示 yyyy-MM-dd
                    Temporal.TIME 表示 HH:mm:ss
  註:當使用註解時,屬性為value時,則這個屬性名稱可以省略,例如:@Temporal(TemporalType)

  2.xml:使用type屬性指定hibernate類型
    <property name="birthDate" type="date"/>
  註:hibernate 日期時間類型有:date,time,timestamp,當然也可以使用java封裝類

 

9.映射枚舉類型
  1.Annotation:使用@Enumerated(value=EnumType) 來註解表示此成員屬性為枚舉映射到資料庫

  其中 EnumType 可以取兩個值:

    1.EnumType.STRING 表示直接將枚舉名稱存入資料庫 (資料庫欄位的類型為varchar(255))

    2.EnumType.ORDINAL 表示將枚舉所對應的下標數值存入資料庫(資料庫欄位的類型為int)

  2.xml:映射非常的麻煩,要先定義自訂類型,然後再使用這個定義的類型,一般不使用這種方式

10.欄位對應的位置(field 或者 get方法)

  即對欄位的註解是放在欄位本身,還是該欄位的get方法上

  Best practice:應該放在get方法上,原因:java的封裝性

  欄位的定義是 private, 是不希望別人來訪問的,如果強行將註解放到 欄位上,對,hibernate的確也可以訪問到(暴力反射),

  但是後果就是會破壞java的封裝性,而放到 get方法(public)就不會有這樣的情況,

 

3.Hibernate基礎配置

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.