1.hibernate.cfg.xml核心配置文件
- 位置:類路徑(classpath、src)–>WEB-INF/classes
- 名稱:hibernate.cfg.xml
- 內容:
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- hibernate.connection.username : 連接數據庫的用戶名 -->
<property name="hibernate.connection.username">root</property>
<!-- hibernate.connection.password : 連接數據庫的密碼 -->
<property name="hibernate.connection.password">123456</property>
<!-- hibernate.connection.url : 連接數據庫的地址,路徑 -->
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/h_day01_db</property>
<!-- 數據庫方言配置
org.hibernate.dialect.MySQLDialect (選擇最短的)
-->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- show_sql: 操作數據庫時,會 向控制檯打印sql語句 -->
<property name="show_sql">true</property>
<!-- format_sql: 打印sql語句前,會將sql語句先格式化 -->
<property name="format_sql">true</property>
<!--
hbm2ddl.auto: 生成表結構的策略配置 update(最常用的取值): 如果當前數據庫中不存在表結構,那麼自動創建表結構.
如果存在表結構,並且表結構與實體一致,那麼不做修改 如果存在表結構,並且表結構與實體不一致,那麼會修改表結構.會保留原有列.
create(很少):無論是否存在表結構.每次啓動Hibernate都會重新創建表結構.(數據會丟失) create-drop(極少):
無論是否存在表結構.每次啓動Hibernate都會重新創建表結構.每次Hibernate運行結束時,刪除表結構.
validate(很少):不會自動創建表結構.也不會自動維護表結構.Hibernate只校驗表結構. 如果表結構不一致將會拋出異常.
-->
<property name="hbm2ddl.auto">update</property>
<!-- hibernate.connection.autocommit: 事務自動提交 -->
<property name="hibernate.connection.autocommit">true</property>
<!-- 將Session與線程綁定=> 只有配置了該配置,才能使用getCurrentSession -->
<property name="hibernate.current_session_context_class">thread</property>
<mapping resource="jxust/simon/domain/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
2.JavaBean + 映射文件
- 位置:javabean同包
- 名稱:javabean同名
- 擴展名:*.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="jxust.simon.domain" >
<!-- class: 配置實體與表的關係
name : 填寫實體的完整類名
table: 與實體對應表的名稱
dynamic-insert:動態插入 默認值是false
true=>如果字段值爲null,不參與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:主鍵生成策略
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>
</class>
</hibernate-mapping>
JavaBean
package jxust.simon.domain;
public class User {
private int id;
private String name;
private String password;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}