1.session:是hibernate操作數(shù)據(jù)庫的一個(gè)核心的接口。session中包裝了一個(gè)connection session接口中有一個(gè)get(class user.class,int id)方法【經(jīng)常要使用】,可以通過主鍵Id得到一條記錄(對(duì)象) Class userClass = User.class; User user = (User)sessioin.get(userClass,id); 對(duì)上面兩行代碼,也可以這么理解,由于session可以管理多個(gè)數(shù)據(jù)庫表所對(duì)應(yīng)的多個(gè)實(shí)體對(duì)象,如果要查詢id為1的實(shí)體對(duì)象, Session.get()方法需要知道從哪個(gè)數(shù)據(jù)庫表中查詢id為1的記錄,所以,除了給get方法傳遞所要查詢的實(shí)體對(duì)象的id值外, 還必須給get方法傳遞實(shí)體對(duì)象的類型,get方法才能知道去哪個(gè)數(shù)據(jù)庫表中進(jìn)行查詢。 2.session接口中還有一個(gè)load(class ,id),與get方法的參數(shù)是一樣的。區(qū)別是它不會(huì)立刻去訪問數(shù)據(jù)庫,在底層不會(huì)產(chǎn)生sql語句, 在第一次需要用到數(shù)據(jù)庫的時(shí)候,底層才會(huì)輸出sql語句。這就是懶加載。 3.session接口中的persist()方法,與save()方法是一樣的。只是在不開啟事務(wù)時(shí)有區(qū)別: save():當(dāng)不開啟事務(wù)時(shí),該方法在會(huì)把記錄插入在數(shù)據(jù)庫中,然后又會(huì)進(jìn)行回滾。最后,在數(shù)據(jù)庫中還是沒有記錄 persist():當(dāng)不開啟事務(wù)時(shí),該方法根本不會(huì)把記錄插入到數(shù)據(jù)庫中。該方法用得較少 |
|