<?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"> <!-- package用於定義包的,那麼class就不用寫包名路徑了 schema指數據庫模式,一個模式下能夠有多張表 --> <hibernate-mapping package="com.demo.pojo" > <!-- class映射一個實體類 提供了公共的無參構造方法 - 經過反射產生對象 屬性用private修飾,而且生成對應的get、set方法 類不能用final修飾 - hibernate會產生代理類(cglib) 類須要指定標識 - 主鍵 name表示實體類的類名 table表示數據庫對應的表名,若是不寫默認是類名 --> <class name="User" table="user"> <!-- id表示實體類的標識(OID) - 對應數據庫表中的主鍵 name實體類的標識屬性名 column表示數據庫表中的列名,若是不寫則數據庫列名與屬性名一致 length 表示數據庫表中對應數據類型的長度,若是不寫有默認長度 type表示類型,若是不寫,hibernate自動根據實體類的字段類型肯定 --> <id name="id" column="id"> <!-- 主鍵生成策略 increment: 由hibernate管理主鍵,自動以遞增的方式生成標識符,每次增量爲1(id+1做爲主鍵);
用於long,short,int類型生成自增主鍵(注意:集羣下不能使用;緣由:每次生成前,會去查詢最大的id) identity: 由底層數據庫生成主鍵。identity是由數據庫本身生成的,但這個主鍵必須設置爲自增加,前提條件是底層數據庫支持自動增加字段類型,
通常來講像SQL Server,MYSQL這類的數據庫都是選擇identity sequence:採用數據庫提供的sequence機制生成主鍵。如oralce中的sequence hilo: 經過hi/lo算法實現的主鍵生成機制,須要額外的數據庫表或字段提供高位值來源 native: hibernate根據使用的數據庫自行判斷採用identity、hilo、sequence其中一種做爲主鍵生成方式。
在hibernate配置中native是默認的,泛指的自增,
也就是說除了oracle數據庫外(oracle下用native須要用到一個叫hibernate_sequence的sequence),
大部分數據庫你均可以使用默認的native來表明自增。 assigned:主鍵由外部程序負責生成,在save()以前手動指定一個 --> <generator class="native"/> <!-- 自增 --> </id> <!-- 實體類屬性 name:指明實體類屬性名(區分大小寫) 另外:<property name="name"><column name="name"></column></property>,經過column指定數據庫列名 --> <property name="name"/> <property name="pwd"/> </class> </hibernate-mapping>
PS:源碼地址 https://github.com/JsonShare/hibernate-demohtml