標籤:定義類 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基礎配置