Hibernate學習筆記2.4(Hibernate核心開發接口和三種狀態)
1.configuration(配置信息管理,產生sessionfactory)
sessionfactory管理一系列的連接池
opensession 永遠打開新的,需要手動close
getcurrentsession如果當前環境有,就會用已經存在的,沒有就創建新的
一旦提交就沒了
getcurrentsession主要用於界定事務邊界,事務提交自動close
上下文:在hibernate.cfg.xml裏面改 currentsession_context_class
thread:線程 當前線程有沒有一個對象,沒有就創建i新的,使用connection
jta: 分布式事務 ,Java tarsaction api多數由中間鍵服務器提供 Tomcat不具備該能力
manager:手動管理事務
custormclass:自己定義
如果使用getcurrentsession必須設定上下文環境
geucurrentsession和sessionopen拿到的類 具體實現可能不一樣 因此一般情況下 不建議混用
如果址用hibernate 就要寫trycatch
用spring的話就不用寫try catch
save();設定一個主鍵,id
首先搞懂三種狀態
三種狀態
transient :內存中的一個對象 緩存中沒有對應的id和value
Persistent:內存中有 緩存中有 數據庫有 有id
Datached: 內存有 緩存沒有 數據庫有 有id
save方法即是把transient轉化為Persisitence
delete方法
Load
@Test public void testLoad() { Session session = sessionFactory.getCurrentSession(); session.beginTransaction(); Teacher t = (Teacher)session.load(Teacher.class, 1); session.getTransaction().commit(); System.out.println(t.getClass()); //System.out.println(t.getName()); }
1,自動打包為intege 實現了序列化接口
get
@Test public void testGet() { Session session = sessionFactory.getCurrentSession(); session.beginTransaction(); Teacher t = (Teacher)session.get(Teacher.class, 1); session.getTransaction().commit(); System.out.println(t.getClass()); //System.out.println(t.getName()); }
用load拿出東西的時候才會發出sql語句,不存在對應記錄不拿東西不會報錯,返回代理對象()
用get拿出對象的時候是直接在數據庫加載,不存在對應記錄不拿東西也會報錯
update
第一種 有detach到persistence 同時數據庫更新
@Test public void testUpdate1() { Session session = sessionFactory.getCurrentSession(); session.beginTransaction(); Teacher t = (Teacher)session.get(Teacher.class, 1); session.getTransaction().commit(); t.setName("zhanglaoshi"); Session session2 = sessionFactory.getCurrentSession(); session2.beginTransaction(); session2.update(t); session2.getTransaction().commit(); }
更新trasent會報錯
如果transent設置id數據庫並且存在
數據庫得有對應的記錄
@Test public void testUpdate2() { Teacher t = new Teacher(); t.setName("zhanglaoshi"); Session session2 = sessionFactory.getCurrentSession(); session2.beginTransaction(); session2.update(t); session2.getTransaction().commit(); }
如果有一個字段特別長 全改就會變低
32集第九分鐘
Hibernate學習筆記2.4(Hibernate核心開發接口和三種狀態)