1、Hibernate的一級緩存:
1、什麼是緩存:緩存是hibernate的一種優化方式,將數據存入內存中,使用的時候直接從內存中取出;
2、hibernate的一級緩存:稱爲是session級別的緩存,一級緩存的生命週期與session一致,一級緩存是hibernate自帶的不可卸載的;
3、原理:在使用hibernate查詢對象時,首先會使用對象屬性的OID值在hibernate的一級緩存中查找,如果找到匹配的OID值的對象,則直接將該對象從緩存中取出來使用,不會再查詢數據庫,如果沒有找到則去數據庫中查找對應的數據;
例如: Student stu=session.get("Student.class","1l"); 會發送查詢sql
Student stu1=session.get("Student.class","1l"); 不會發送查詢sql
4、hibernate一級緩存的特殊區域:快照區
原理: Student stu=session.get(Student.class,"1l"); 緩存區 快照區
id:1 name:張三 id:1 name:張三
stu.setName("李四"); id:1 name:李四 id:1 name:張三
tx.commit(); ------提交事務時對比緩存區數據和快照區數據,如果相同則不更新數據,如果不相同則更新數據庫;
session.close();
2、事務
1、什麼是事務:事務指的是邏輯上的一組操作,組成這組操作的各個邏輯單元要麼全部成功,要麼全部失敗;
2、事務的特性;
- 原子性:代表事務不可分割;
- 一致性:代表數據執行前後數據的完整性保持一致;
- 隔離性:代表一個事務執行的過程中,不受到其他事務的干擾;
- 持久性:代表事務執行完畢後,數據持久到數據庫中;
3、綁定:
爲保證連接爲同一個,需要將連接和當前線程進行綁定
hibernate內部已經綁定好了ThreadLocal,在SessionFactory中提供了一個方法,getCurrentSession();但是是默認禁用的,需要配置才能使用;在hibernate的核心配置文件中配置: