hibernate一級緩存
hibernate 一級緩存:(緩存的是實體對象)
一級緩存很短和session的生命周期一致,一級緩存也叫session級的緩存或事務緩存
哪些方法支持一級緩存:
*get()
*load()
*iterate()
如何管理一級緩存:
* session.clear() session.evict()
如何避免一次性大量的實體數據入庫導致內存溢出
*先flush,再clear
如果數據量特別大,考慮采用jdbc實現,如果jdbc也不能滿足要求,可以考慮采用數據庫本身的特定導入工具
一.Load測試: 在同一個session中發出兩次load查詢
Load測試: 開啟兩個session中發出兩次load查詢
Student sutdent = (Student)session.load(Student.class,1);
sessioin.close();
………..
二.Get測試: 在同一個session中發出兩次get查詢
三.iterate測試: 在同一個session中發出兩次iterator查詢
Student student = (Student)session.createQuery(“from Student s where s.id=1”).iterate().next();
System.out.println(student.getName());
student = (Student)session.createQuery(“from Student s where s.id=1”).iterate().next();
System.out.println(student.getName());
四.Iterate查詢屬性測試: 同一個session中發出兩次查詢屬性
String name = (String)session.createQuery(“select s.name from Student s where s.id=1”).iterate().next();
System.out.println(name);
String name = (String)session.createQuery(“select s.name from Student s where s.id=1”).iterate().next();
System.out.println(name);
Student sutdent = (Student)session.load(Student.class,id);
save的時候,他會在緩存里放一份,不會發出sql,因為save是使用緩存的
六.同一個session中先調用load查詢,然后執行sessio.clear()或session.evict(),再調用load查詢
Student sutdent = (Student)session.load(Student.class,1);
Student sutdent = (Student)session.load(Student.class,1);
上面的語句都會發出sql 因為一級緩存中的實體被清除了
七.向數據庫中批量加入1000條數據
for(int i=0;i<1000;i++){
//每20條數據就強制session將數據持久化,同時清除緩存,避免大量數據造成內存溢出
}
}
posted on 2009-04-06 11:59 胡鵬 閱讀(415) 評論(0) 編輯 收藏 所屬分類: hibernate