Configuration是用來加載配置文件的java
咱們Hibernate中主要有兩個配置文件,第一個是核心的配置文件,第二個是映射文件。web
SessionFactory 至關於java web鏈接池,用於管理全部session
得到方式:config.buildSessionFactory();
sessionFactory hibernate緩存配置信息 (數據庫配置信息、映射文件,預約義HQL語句 等)
SessionFactory線程安全,能夠是成員變量,多個線程同時訪問時,不會出現線程併發訪問問題。數據庫
SessionFactory與鏈接池的區別api
getCurrentSession()方法緩存
用來操做數據庫的。Sesion至關於JDBC中的Connection。咱們經過session操做PO對象實現增刪改查。安全
A.使用session中的get方法查詢session
結果:併發
B.使用session中的load方法ide
load方法.返回一個代理對象,得到其內容時,會查詢數據庫,是每次訪問屬性都會查詢數據庫嗎?工具
答:不是每次都查.代理對象中有一個標識是否被初始化的boolean型變量. 記錄是否被初始化過.
代理都是要基於接口的,用load方法返回的代理,就沒有實現任何接口?
答:java中的動態代理是基於接口. 而 Hibernate 是使用javassist-3.12.0.GA.jar 產生代理對象的.
該代理與被代理對象之間的關係是繼承關係.與咱們學的動態代理不是一種.因此不須要接口.
出現bug:
分析:get和load的執行原理
C.使用HQL語言查詢數據庫中表的全部記錄
D.使用Criteria查詢全部數據庫
E.使用原生的SQL語句查詢
在增刪改查中咱們學習的方法有
session.save();
session.update();
session.delete();
session.get();
session.load(); 對比get
session.createQuery();
session.createCritieria();
session.createSqlQuery();
Transaction封裝了事務的操做
通常事務的操做中有:
開啓事務 beginTransaction()
得到事務 getTransaction()
提交事務 commit()
回滾事務 rollback()
細節處理
從這裏中咱們使用getCurrentSession()方法得到一個事務,當你沒有關閉這個事務的時候,
當你再次獲取事務,它們屬於同一個事務。
Query對象封裝了HQL語句對象,且封裝了查詢的細節
使用like查找
一些基本的查詢條件查詢
咱們知道在使用hibernate進行增刪改查的時候都要獲取到session,這致使代碼的重用性很強,因此咱們能夠
建立一個工具類去解決這個問題。
import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; import org.hibernate.classic.Session; //完成Hibernate工具類 //封裝配置文件讀取操做 //封裝Sessionfactroy建立操做 //封裝session得到操做 public class HibernateUtils { private static SessionFactory sf; static{ //1加載配置 Configuration conf = new Configuration().configure(); //2 根據Configuration 配置信息建立 SessionFactory sf = conf.buildSessionFactory(); // Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() { @Override public void run() { System.out.println("虛擬機關閉!釋放資源"); sf.close(); } })); } public static org.hibernate.Session openSession(){ //3 得到session Session session = sf.openSession(); return session; } public static org.hibernate.Session getCurrentSession(){ //3 得到session Session session = sf.getCurrentSession(); return session; } }