存儲:把對象模型變成關(guān)系模型
加載:關(guān)系模型變成對象模型(把數(shù)據(jù)庫里的記錄變成實體對象)
一、get和load區(qū)別
- 在不考慮緩存的情況下庵朝,get方法會在調(diào)用之后立即向數(shù)據(jù)庫發(fā)出sql語句兽愤,返回持久化對象袍祖;load方法會在調(diào)用后返回一個代理對象。該代理對象只保存了實體對象的id例朱,直到使用對象的非主鍵屬性時才會發(fā)出sql語句魔慷。
- 查詢數(shù)據(jù)庫中不存在的數(shù)據(jù)時只锭,get方法返回null,load方法拋出ObjectNotFoundException盖彭。
二纹烹、cglib代理:目標(biāo)類的子類
語法:
1页滚、繼承目標(biāo)類
2召边、覆寫了目標(biāo)類的所有g(shù)et、set方法
3裹驰、在覆寫的方法里隧熙,首先判斷target是否為null,如果為null幻林,就session.get(User.class贞盯,"主鍵") 訪問數(shù)據(jù)庫拿到記錄封裝到user對象,
把user對象的地址給target沪饺,然后就調(diào)用target.getName().....
如果不為null躏敢,就直接調(diào)用target.getName()
session.load(User.class,"id值") //創(chuàng)建代理對象
沒發(fā)sql語句,創(chuàng)建了user對象(代理對象)整葡,這個代理對象是user類的子類對象
特點:是目標(biāo)類的子類對象件余,對user類的所有方法都進行了覆寫(沒有繼承私有屬性)
在代理對象中有個實例全局變量target
三、pojo實體類(也叫數(shù)據(jù)bean)
1、包聲明
2啼器、導(dǎo)入相應(yīng)的包
3旬渠、類名和文件名相同
4、顯示的無參構(gòu)造方法
5端壳、屬性私有化告丢,提供get,set方法
6损谦、不能定義成final
7岖免、提供無參的構(gòu)造方法
四、刪除:
session.delete(user);
執(zhí)行完delete后照捡,map和key里有記錄觅捆,放到臨時集合的deletion里
commit后,只把實體類在數(shù)據(jù)庫中對應(yīng)的記錄刪除了麻敌,user對象處于瞬時態(tài)
在session里的map里沒有記錄栅炒,user里有記錄