前提條件:你的類必須繼承HibernateDaoSupport
一:
回調(diào)函數(shù):
- public List getList(){
- return (List ) getHibernateTemplate().execute(
- new HibernateCallback() {
- public List doInHibernate(final Session s)
- throws HibernateException, SQLException {
-
- StringBuffer sb = new StringBuffer();
- Query query = s.createSQLQuery(sb.toString());//[b]執(zhí)行普通sql[/b]
- Query query = s.createQuery(sb.toString());// [b]執(zhí)行hql [/b]
- List list = query.list();
- return list ;
- }
- });
- }
采用這種做法的好處是:不用關(guān)心事務(wù)。session的創(chuàng)建和銷毀,一切都在程序內(nèi)部完成??纯疵謉oInHibernate就知道好處了。不好的是程序看起來比較亂!個人認(rèn)為。
二:
- getHibernateTemplate().find():
- ist list = getHibernateTemplate().find(String sql ):
這種的前提是sql必須是hql ,原始sql 不能執(zhí)行。
三:
自己獲取session處理。
獲取session的兩種方式:this.getSession();和this.getHibernateTemplate().getSessionFactory().openSession();
獲取session以后再createQuery操作就一樣了。但是這種做法,是需要自己去手動關(guān)閉session的。所以你需要配置openSessioninview,個人認(rèn)為不推薦使用!
其他:
getHibernateTemplate.delete(Object);
getHibernateTemplate.save(Object);
getHibernateTemplate.update(Object);
總結(jié):推薦使用回調(diào)函數(shù)。
補(bǔ)充百科:
Spring的Hibernate ORM
框架帶來了方便的HibernateDaoSupport類,你的
DAO類可以繼承它:
public class StudentDaoHibernate extends HibernateDaoSupport implements StudentDao{
.................
}
如果你選擇這種設(shè)計,就需要動態(tài)注入
SessionFactory而HibernateDaoSupport包含這個屬性.這個類提供了一個方便的方法getHibernateTemplate(); 就能得到
HibernateTemplate的一個實例.它也有g(shù)etSession()和releaseSession,以便于你應(yīng)為某些原因而不使用HibernateTempate的情況下執(zhí)行
Hibernate操作。
HibernateDaoSupport提供了基于
AOP事務(wù)的自動處理,
程序員完全可以不用理會事務(wù)的開始與提交。在
JDBC中一個
Connection對象使用一個事務(wù),那么在Hibernate中一個事務(wù)肯定要關(guān)聯(lián)一個
SessionFactory了,然而這個SessionFactory卻沒有在
DAO中體現(xiàn)。其實主要的原因是HibernateDaoSupport類已經(jīng)默默地做了封裝的工作,它用一個setSessionFactory方法將SessionFactory進(jìn)行注入,所以繼承自HibernateDaoSupport類的DAO都會具有SessionFactory的屬性,從而可以通過SessionFactory創(chuàng)建
Session實例操作數(shù)據(jù)庫。
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請
點(diǎn)擊舉報。