Hibernate配置文件與映射文件詳解


Hibernate配置文件與映射文件詳解

一、Hibernate配置文件詳解

Hibernate配置文件有兩種形式:XML與properties 

XML(hibernate.cfg.xml)文件詳解:

<?xml version="1.0" encoding="GBK"?>
<!-- 指定Hibernate配置文件的DTD信息 -->
<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<!-- hibernate- configuration是連接配置文件的根元素 -->
<hibernate-configuration>
    <session-factory>
        <!-- 指定連接數據庫所用的驅動 -->
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <!-- 指定連接數據庫的url,hibernate連接的數據庫名 -->
        <property name="connection.url">jdbc:mysql://localhost/數據庫名</property>
        <!-- 指定連接數據庫的用戶名 -->
        <property name="connection.username">root</property>
        <!-- 指定連接數據庫的密碼 -->
        <property name="connection.password">32147</property>
        <!-- 指定連接池里最大連接數 -->
        <property name="hibernate.c3p0.max_size">20</property>
        <!-- 指定連接池里最小連接數 -->
        <property name="hibernate.c3p0.min_size">1</property>
        <!-- 指定連接池里連接的超時時長 -->
        <property name="hibernate.c3p0.timeout">5000</property>
        <!-- 指定連接池里最大緩存多少個Statement對象 -->
        <property name="hibernate.c3p0.max_statements">100</property>
        <property name="hibernate.c3p0.idle_test_period">3000</property>
        <property name="hibernate.c3p0.acquire_increment">2</property>
        <property name="hibernate.c3p0.validate">true</property>
        <!-- 指定數據庫方言 -->
        <property name="dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
        <!-- 根據需要自動創建數據表 -->
        <property name="hbm2ddl.auto">update</property>
        <!-- 顯示Hibernate持久化操作所生成的SQL -->
        <property name="show_sql">true</property>
        <!-- 將SQL腳本進行格式化后再輸出 -->
        <property name="hibernate.format_sql">true</property>
        <!-- 羅列所有的映射文件 -->
        <mapping resource="映射文件路徑/News.hbm.xml"/>
    </session-factory>
</hibernate-configuration>

 

properties(hibernate.properties)文件詳解

## MySQL
#方言
hibernate.dialect org.hibernate.dialect.MySQLDialect
hibernate.dialect org.hibernate.dialect.MySQLInnoDBDialect
hibernate.dialect org.hibernate.dialect.MySQLMyISAMDialect
#驅動
hibernate.connection.driver_class com.mysql.jdbc.Driver
#數據庫地址
hibernate.connection.url jdbc:mysql://127.0.0.1/datdabseName
#用戶名
hibernate.connection.username root
#密碼
hibernate.connection.password 123456
#是否在控制台輸出sql語句
hibernate.show_sql true/false
#設置當創建sessionfactory時,是否根據映射文件自動建立數據庫表。 create-drop:表示關閉sessionFactory時,將drop剛建的數據庫表。該屬性可以是update/create-drop/create
hibernate.hbm2ddl.auto update/create-drop/create
 
###########################
### C3P0 Connection Pool C3P0連接池###
###########################
#連接池最大鏈接數
hibernate.c3p0.max_size 2
#連接池最小連接數
hibernate.c3p0.min_size 2
#連接池連接的超時時長
hibernate.c3p0.timeout 5000
#緩存statements 的數量
hibernate.c3p0.max_statements 100
hibernate.c3p0.idle_test_period 3000
hibernate.c3p0.acquire_increment 2
hibernate.c3p0.validate true/false
 
 
############
### JNDI (java naming directory interface)Java命名目錄接口###
###當無需hibernate自己管理數據源而是直接訪問容器管理數據源 使用JNDI
############
#指定數據源JNDI名字
hibernate.connection.datasource dddd
#文件系統下
hibernate.jndi.class com.sun.jndi.fscontext.RefFSContextFactory
hibernate.jndi.url file:/
 
#網絡
#指定JND InitialContextFactory 的實現類,該屬性也是可選的。如果JNDI與Hibernate持久化訪問的代碼處於同一個應用,無需指定該屬性
hibernate.jndi.class com.ibm.websphere.naming.WsnInitialContextFactory
#指定JNDI提供者的URL,該屬性可選 如果JNDI與Hibernate持久化訪問的代碼處於同一個應用,無需指定該屬性
hibernate.jndi.url iiop://localhost:900/
 
#指定鏈接數據庫用戶名
hibernate.connection.username  root
#指定密碼
hibernate.connection.password  1111
#指定方言
hibernate.dialect org.hibernate.dialect.MySQLDialect
 
#######################
### Transaction API   事務屬性說明###
#######################
 
#指定是否在事務結束后自動關閉session 
hibernate.transaction.auto_close_session true/false
#指定session是否在事務完成后自動將數據刷新到底層數據庫
hibernate.transaction.flush_before_completion true/false
 
## 指定hibernate所有的事務工廠的類型,該屬性必須是TransactionFactory的直接或間接子類
 
hibernate.transaction.factory_class org.hibernate.transaction.JTATransactionFactory
hibernate.transaction.factory_class org.hibernate.transaction.JDBCTransactionFactory
 
## 該屬性值是一個JNDI名,hibernate將使用JTATTransactionFactory從應用服務器中取出JTAYserTransaction
 
jta.UserTransaction jta/usertransaction
jta.UserTransaction javax.transaction.UserTransaction
jta.UserTransaction UserTransaction
 
## 該屬性值為一個transactionManagerLookup類名,當使用JVM級別的緩存時,或在JTA環境中使用hilo生成器策略時,需要該類
 
hibernate.transaction.manager_lookup_class org.hibernate.transaction.JBossTransactionManagerLookup
hibernate.transaction.manager_lookup_class org.hibernate.transaction.WeblogicTransactionManagerLookup
hibernate.transaction.manager_lookup_class org.hibernate.transaction.WebSphereTransactionManagerLookup
hibernate.transaction.manager_lookup_class org.hibernate.transaction.OrionTransactionManagerLookup
hibernate.transaction.manager_lookup_class org.hibernate.transaction.ResinTransactionManagerLookup

 

二、映射文件詳解

hibernate映射配置文件用於配置與數據庫表之間的映射關系,(通過配置映射關系,在啟動項目的時候,hibernate就會生成相對應的數據表,但是數據庫得自己建) 
配置文件中的類主鍵和屬性與數據庫表是一一對應的,配置好它們之間的映射關系,就能自動生成相應的數據庫表。

<?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屬性寫的是實體類包-->
<hibernate-mapping package="com.me.relation.entity">
    <!--class標簽中的name為實體對應的類名,table標簽為創建的表名,如果不寫默認就是類名首字母小寫(student)-->
    <class name="Student" table="student">
        <!--
            以下所有標簽,name為對應實體中屬性名,column屬性可有可無,有的話表示自己定義在表中的字段名,不寫的話默認與name一致(與實體中的屬性名一致)
        -->
        <!--必須有的主鍵標簽-->
        <id name="id">
            <!--主鍵生成策略,這里表示自增長-->
            <generator class="identity"></generator>
        </id>
        <property name="joinTime" column="join_time"></property>
        <property name="name"></property>
        <property name="sex"></property>
        <property name="age"></property>
    </class>
</hibernate-mapping>

主鍵生成策略詳解:

increment, 數字類型的自增。(用於單線程,或線程安全的)
原理:當前表最大的id值,+1,然后插入時加進去

identity,數字類型的自增。依賴於數據庫底層的實現。
原理:數據庫底層主鍵的auto_increament

uuid,生成32位的16進制的一串沒有任何意義的唯一編碼。
原理:框架生成,然后插入時加進去

guid ,用書mySql或者Sql service數據中生成字符串類型的唯一標識。
原理:用數據庫自帶的uuid函數

native: 依賴於數據庫底層的實現。數據庫默認的主鍵生成策略是什么,他就是什么。
原理:數據庫默認(auto_increament)

assigned:手動分配。
原理:手動加

foreign : 使用外鍵做主鍵。(比較少見,一般只會一對一當中出現)
原理:獲取外鍵的值,插入到表中

三、Hibernate增刪查改

創建pojo類

user.java

public class User {
    
    private int id;
    
    private String name;
    
    private String sex;
    
    private String email;

    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 getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public User() {
        super();
    }

    public User(String name, String sex, String email) {
        super();        
        this.name = name;
        this.sex = sex;
        this.email = email;
    }

    @Override
    public String toString() {
        return "User [id=" + id + ", name=" + name + ", sex=" + sex + ", email=" + email + "]";
    }
    
}

增加

public void  add() {
        User user = new User("123", "女", "1234567@qq.com");
        Configuration configuration = new Configuration();
        SessionFactory sessionFactory = configuration.configure().buildSessionFactory();
        Session session = sessionFactory.openSession();
        Transaction transaction = session.beginTransaction();
        session.save(user);
        session.getTransaction();
        transaction.commit();
        session.close();
        sessionFactory.close();
    }

查詢

public void getUser() {
        Configuration configuration = new Configuration();
        SessionFactory sessionFactory = configuration.configure().buildSessionFactory();
        Session session = sessionFactory.openSession();
        User user = session.get(User.class, 5);
        System.out.println(user);
        session.close();
        sessionFactory.close();
    }

更新

public static void  update() {
        User user = new User();
     user.setId(1); Configuration configuration
= new Configuration(); SessionFactory sessionFactory = configuration.configure().buildSessionFactory(); Session session = sessionFactory.openSession(); Transaction transaction = session.beginTransaction(); session.update(user); session.getTransaction(); transaction.commit(); session.close(); sessionFactory.close(); }

刪除

public static void  delete() {
        User user = new User();
     user.setId(1);
        Configuration configuration = new Configuration();
        SessionFactory sessionFactory = configuration.configure().buildSessionFactory();
        Session session = sessionFactory.openSession();
        Transaction transaction = session.beginTransaction();
        session.delete(user);
        session.getTransaction();
        transaction.commit();
        session.close();
        sessionFactory.close();
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM