Hibernate框架 主配置文件 Hibernate.cfg.xml 映射配置 說明

1 主配置文件

Hibernate.cfg.xmljava

         主配置文件中主要配置:數據庫鏈接信息、其餘參數、映射信息!mysql

 

經常使用配置查看源碼:sql

         hibernate-distribution-3.6.0.Final\project\etc\hibernate.properties數據庫

 

<!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節點表明一個數據庫 -->
    <session-factory>
    
        <!-- 1. 數據庫鏈接配置 -->
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql:///hib_demo?useUnicode=true&amp;characterEncoding=UTF8</property>
        <property name="hibernate.connection.username">用戶名</property>
        <property name="hibernate.connection.password">密碼</property>
        <!-- 
                數據庫方法配置,hibernate在運行的時候,會根據不一樣的方言生成符合當前數據庫語法的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>
        
        <!-- 3. 加載全部映射 -->
        <mapping resource="com/yif/a_hello/Employee.hbm.xml"/>
        
    </session-factory>
</hibernate-configuration>

 

2 數據庫鏈接參數配置

例如:api

## MySQL服務器

 

#hibernate.dialect org.hibernate.dialect.MySQLDialectsession

#hibernate.dialect org.hibernate.dialect.MySQLInnoDBDialect併發

#hibernate.dialect org.hibernate.dialect.MySQLMyISAMDialectoracle

#hibernate.connection.driver_class com.mysql.jdbc.Driverapp

#hibernate.connection.url jdbc:mysql:///test

#hibernate.connection.username gavin

#hibernate.connection.password

 

<!-- 1. 數據庫鏈接配置 -->
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql:///hib_demo?useUnicode=true&amp;characterEncoding=UTF8</property>
        <property name="hibernate.connection.username">用戶名</property>
        <property name="hibernate.connection.password">密碼</property>
        <!-- 
                數據庫方法配置,hibernate在運行的時候,會根據不一樣的方言生成符合當前數據庫語法的sql
        -->
        <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
        

 

2.1 自動建表

Hibernate.properties

 

#hibernate.hbm2ddl.auto create-drop 每次在建立sessionFactory時候執行建立表;

                                                                           當調用sesisonFactory的close方法的時候,刪除表!

#hibernate.hbm2ddl.auto create   每次都從新建表; 若是表已經存在就先刪除再建立<property name="hibernate.hbm2ddl.auto">create</property>

#hibernate.hbm2ddl.auto update  若是表不存在就建立; 表存在就不建立; <property name="hibernate.hbm2ddl.auto">update</property>

#hibernate.hbm2ddl.auto validate  (生成環境時候) 執行驗證: 當映射文件的內容與數據庫表結構不同的時候就報錯!

<!-- 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>
        
        <!-- 3. 加載全部映射 -->
        <mapping resource="com/yif/a_hello/Employee.hbm.xml"/>

 

當使用

// 建立sf對象
        sf = new Configuration()
            .configure()
            .addClass(User.class)  //(測試) 會自動加載映射文件:Employee.hbm.xml
            .buildSessionFactory();

 

用以上語句能夠 不用在主配置文件中 寫  <!-- 3. 加載全部映射 --> <mapping resource="com/yif/a_hello/Employee.hbm.xml"/>

2.2 手動建表

public class App_ddl {

    // 自動建表
    @Test
    public void testCreate() throws Exception {
        // 建立配置管理類對象
        Configuration config = new Configuration();
        // 加載主配置文件
        config.configure();
        
        // 建立工具類對象
        SchemaExport export = new SchemaExport(config);
        // 建表
        // 第一個參數: 是否在控制檯打印建表語句
        // 第二個參數: 是否執行腳本
        export.create(true, true);
    }
}

 

3 映射配置

 

3.1 普通字段類型

3.2 主鍵映射

         單列主鍵映射

         多列做爲主鍵映射

 

主鍵生成策略,查看api:   5.1.2.2.1. Various additional generators

 

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">


<!-- 映射文件: 映射一個實體類對象;  描述一個對象最終實現能夠直接保存對象數據到數據庫中。  -->
<!-- 
    package: 要映射的對象所在的包(可選,若是不指定,此文件全部的類都要指定全路徑)
    auto-import 默認爲true, 在寫hql的時候自動導入包名
                若是指定爲false, 再寫hql的時候必需要寫上類的全名;
                  如:session.createQuery("from cn.itcast.c_hbm_config.Employee").list();
 -->
<hibernate-mapping package="cn.itcast.c_hbm_config" auto-import="true">
    
    <!-- 
        class 映射某一個對象的(通常狀況,一個對象寫一個映射文件,即一個class節點)
            name 指定要映射的對象的類型
            table 指定對象對應的表;
                  若是沒有指定表名,默認與對象名稱同樣 
     -->
    <class name="Employee" table="employee">
        
        <!-- 主鍵 ,映射-->
        <id name="empId" column="id">
            <!-- 
                主鍵的生成策略
                    identity  自增加(mysql,db2)
                    sequence  自增加(序列), oracle中自增加是以序列方法實現
                    native  自增加【會根據底層數據庫自增加的方式選擇identity或sequence】
                            若是是mysql數據庫, 採用的自增加方式是identity
                            若是是oracle數據庫, 使用sequence序列的方式實現自增加
                    
                    increment  自增加(會有併發訪問的問題,通常在服務器集羣環境使用會存在問題。)
                    
                    assigned  指定主鍵生成策略爲手動指定主鍵的值
                    uuid      指定uuid隨機生成的惟一的值
                    foreign   (外鍵的方式, one-to-one講)
             -->
            <generator class="uuid"/>
        </id>
        
        <!-- 
            普通字段映射
            property
                name  指定對象的屬性名稱
                column 指定對象屬性對應的表的字段名稱,若是不寫默認與對象屬性一致。
                length 指定字符的長度, 默認爲255
                type   指定映射表的字段的類型,若是不指定會匹配屬性的類型
                    java類型:     必須寫全名
                    hibernate類型:  直接寫類型,都是小寫
        -->
        <property name="empName" column="empName" type="java.lang.String" length="20"></property>
        <property name="workDate" type="java.util.Date"></property>
        <!-- 若是列名稱爲數據庫關鍵字,須要用反引號或改列名。 -->
        <property name="desc" column="`desc`" type="java.lang.String"></property>
        
    </class>
    

</hibernate-mapping>

 

3.3 複合主鍵映射

User 類   主鍵須要單獨爲類

public class User {

    // 名字跟地址,不會重複
    private CompositeKeys keys;
    private int age;
    
    public CompositeKeys getKeys() {
        return keys;
    }
    public void setKeys(CompositeKeys keys) {
        this.keys = keys;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    
    
    
}

 

主鍵類:必須實現 序列化

 讀取?
    主鍵查詢,
    //構建主鍵查詢
    //構建主鍵再查詢
        CompositeKeys keys = new CompositeKeys();
        keys.setAddress("廣州棠東");
        keys.setUserName("Jack");
        
        // 主鍵查詢
        User user = (User) session.get(User.class, keys);  後面的id 是 Serializable
import java.io.Serializable;

// 複合主鍵類
public class CompositeKeys implements Serializable{
    private String userName;
    private String address;
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
    
}

 

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="cn.itcast.d_compositeKey" auto-import="true">
    
    <class name="User">
        
        <!-- 複合主鍵映射 -->
        <composite-id name="keys">
            <key-property name="userName" type="string"></key-property>
            <key-property name="address" type="string"></key-property>
        </composite-id>
        
        <property name="age" type="int"></property>        
        
    </class>
    

</hibernate-mapping>
相關文章
相關標籤/搜索