1. 程式人生 > >Hibernate API詳解

Hibernate API詳解

begin 連接 package 關閉 intra 建議 import 習慣 gin

hibernate體系結構

技術分享

PO:persistent Object 持久對象,javabean+hbm.xml,習慣稱呼為PO類

技術分享

Configuration

Configuration hibernate 提供用於存放所有配置信息對象

構造方法

new Configuration(),加載配置文件,hibernate.properties文件。但一般情況沒有編寫。

參考的配置文件:%h%project/etc/hibernate.properties

api

config.configure(),加載src下hibernate.xml文件

技術分享

config.configure(String path) path指定核心配置文件的位置

例如:conifgure("/cn/util/abc.cfg.xml")

加載映射文件

通常將映射文件配置hibernate.cfg.xml<mapping resource="cn/util/.../User.hbm.xml">

config.addClass(*.class) 將在class對象同級目錄下,同名的hbm.xml文件

例如:config.addClass(Book.class),加載Book類,所在的包下面的Book.hbm.xml文件

技術分享

config.addResource(String hbm)將指定映射文件xml加載內存,此時文件名稱任意,不建議任意

SessionFactory

sessionFactory 用於提供session,相當於連接池,通過Configuration加載hibernate.cfg.xml創建對象

技術分享

獲得對象:config.builderSessionFactory()

SessionFactory是線程安全的。目的是每一個線程獲得的session都是不同的,不存在線程並發問題

session獲得:

創建一個新的session:factory.openSession();

將session綁定本地線程中,在一個線程共享session:factory.getCurrentSession();(之後使用)

工具類

package cn.hibernate.util;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class H3Utils {
//方式1
//private static SessionFactory factory2 = new Configuration().configure().buildSessionFactory();


//方式2
//創建一個工廠
private static Configuration configuration;
private static SessionFactory factory;


static{
configuration = new Configuration().configure();
factory = configuration.buildSessionFactory();
}


public static Session openSession(){
return factory.openSession();
}
}

Session接口

session :服務器 與 數據庫之間會話,相當於 Connection

session單線程,存在線程並發問題,線程不安全

技術分享

註意:session必須關閉,session.close();

Transaction

開啟事物:session.beginTransaction();

提交事物:session.commit();

回滾事物:session.rollback();

@Test
public void demo01(){
//01.獲取session
Session session = H3Utils.openSession();
Transaction transaction = null;
try {
//#1開啟事物
transaction = session.beginTransaction();

//操作:。。。。


//#2提交
transaction.commit();
} catch (HibernateException e) {
// TODO Auto-generated catch block
if(transaction != null){
//#3回滾
transaction.rollback();
}
e.printStackTrace();
}
}

Hibernate API詳解