目前已經學瞭如何搭建Hibernate的開發環境,以及Hibernate對應的API了…在快速入門還沒講解的就是配置文件是怎麼配置的。所以,本博文主要講解主配置文件以及映射配置文件..java
主配置文件主要配置:mysql
經常使用的配置信息均可以在hibernate-distribution-3.6.0.Final\project\etc\hibernate.properties
目錄下能夠找到..sql
經常使用的配置信息均可以在hibernate.properties文件中找到,所以,咱們來搜索一下:數據庫
<!-- 1. 數據庫鏈接配置 --> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.url">jdbc:mysql:///hib_demo</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">root</property> <!-- 數據庫方法配置, hibernate在運行的時候,會根據不一樣的方言生成符合當前數據庫語法的sql【大體能夠理解成:不一樣的版本對應的SQL不一樣】 --> <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
經常使用的有那麼三個:服務器
<!-- 2. 其餘相關配置 --> <!-- 2.1 顯示hibernate在運行時候執行的sql語句 --> <property name="hibernate.show_sql">true</property> <!-- 2.2 格式化sql --> <property name="hibernate.format_sql">true</property> <!-- 2.3 自動建表 --> <property name="hibernate.hbm2ddl.auto">update</property>
須要咱們注意的是自動建表,其中它有幾個參數:markdown
值得注意的是:mapping的屬性使用的是resource!session
<!--3. 加載映射文件--> <mapping resource="zhongfucheng/domain/User.hbm.xml"/>
加載映射文件其實咱們能夠在程序中加載,不必定在配置文件中配置….通常地,咱們在測試的時候通常使用程序的方式去加載映射文件【方便】併發
那麼怎麼在程序中加載映射文件呢?oracle
在Configuration對象中提供了addClass()的方法。app
通常地咱們的映射配置文件和JavaBean對象是放在同一個包下的。而且映射文件的命名是有規範的。所以Hibernate是能夠經過提供的JavaBean對象從而找到相對應的映射文件!
//獲取加載配置管理類 Configuration configuration = new Configuration(); //加載User的映射文件! configuration.configure().addClass(User.class);
映射文件: 映射一個實體類對象; 描述一個對象最終實現能夠直接保存對象數據到數據庫中
一般地,咱們都是一個JavaBean對象對應一個映射配置文件,而且配置文件和JavaBean對象是放在同一個目錄下的
咱們按照快速入門的映射配置文件一步一步來說解:
<!--在domain包下--> <hibernate-mapping package="zhongfucheng.domain"> <!--類名爲User,表名也爲User--> <class name="User" table="user"> <!--主鍵映射,屬性名爲id,列名也爲id--> <id name="id" column="id"> <!--根據底層數據庫主鍵自動增加--> <generator class="native"/> </id> <!--非主鍵映射,屬性和列名一一對應--> <property name="username" column="username"/> <property name="cellphone" column="cellphone"/> <property name="password" column="password"/> </class> </hibernate-mapping>
<hibernate-mapping>
節點經常使用的屬性:
<class>
節點class 映射某一個對象的(通常狀況,一個對象寫一個映射文件,即一個class節點)
經常使用的屬性:
<property>
節點property是普通屬性的映射,即JavaBean普通的成員變量屬性就使用property來描述!
經常使用的屬性:
值得注意的是:若是列名稱爲數據庫關鍵字,須要用反引號或改列名。固然啦,咱們通常不使用關鍵字來做爲列名
7———-
<id>
節點id是主鍵映射….
<id>
節點下還有子節點<generator class=""/>
主鍵的自動生成策略
指定主鍵生成策略爲手動指定主鍵的值
指定主鍵生成策略爲UUID生成的值
foreign(外鍵的方式, one-to-one講)
<composite-id>
主鍵通常分爲兩種:
單列主鍵就是上面那種,那麼若是要使用多列複合主鍵就須要使用<composite-id>
節點來配置了
public class User2 { private String username; private String password; private String cellphone; //各類setter和getter方法 }
package zhongfucheng.domain; /** * Created by ozc on 2017/5/6. */ public class CompositeKey implements Serializable{ private String username; private String password; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
package zhongfucheng.domain; /** * Created by ozc on 2017/5/6. */ public class User2 { //在User對象中維護這個主鍵對象 private CompositeKey key; private String cellphone; public CompositeKey getKey() { return key; } public void setKey(CompositeKey key) { this.key = key; } public String getCellphone() { return cellphone; } public void setCellphone(String cellphone) { this.cellphone = cellphone; } }
public static void main(String[] args) { //建立對象 User2 user2 = new User2(); CompositeKey compositeKey = new CompositeKey(); compositeKey.setUsername("123"); compositeKey.setPassword("123"); user2.setCellphone("111"); user2.setKey(compositeKey); //獲取加載配置管理類 Configuration configuration = new Configuration(); //加載User的映射文件! configuration.configure().addClass(User2.class); //建立Session工廠對象 SessionFactory factory = configuration.buildSessionFactory(); //獲得Session對象 Session session = factory.openSession(); //使用Hibernate操做數據庫,都要開啓事務,獲得事務對象 Transaction transaction = session.getTransaction(); //開啓事務 transaction.begin(); //添加User2對象到數據庫 session.save(user2); //提交事務 transaction.commit(); //關閉Session session.close(); }
由於Hibernate在取得的時候是須要實現Serializable這個接口的對象的…所以compositeKey必須實現Serializable接口