回覆列表
  • 1 # 使用者3494949202203

    HibernateTemplate的常用方法簡介:

    q find(String queryString):根據HQL查詢字串來返回例項集合

    q findByNamedQuery(String queryName):根據命名查詢返回例項集合

    q get(Class entityClass, Serializable id):根據主鍵載入特定持久化類的例項

    q save(Object entity):儲存新的例項

    q saveOrUpdate(Object entity):根據例項狀態,選擇儲存或者更新

    q update(Object entity):更新例項的狀態,要求entity是持久狀態

    q setMaxResults(int maxResults):設定分頁的大小

    1.使用getSession()方法你只要繼承 sessionFactory,而使用getHibernateTemplate()方法必須繼承HibernateDaoSupport當然包括 sessionFactory,這點區別都不是特別重要的,下面這些區別就很重要了

    2.getSession()方法是沒有經過spring包裝 的,spring會把最原始的session給你,在使用完之後必須自己呼叫相應的close方法,而且也不會對宣告式事務進行相應的管理,一旦沒有及時 關閉連線,就會導致資料庫連線池的連線數溢位,getHibernateTemplate()方法是經過spring封裝的,例如新增相應的宣告式事務管 理,由spring管理相應的連線。

    在實際的使用過程中發現的確getHibernateTemplate()比getSession()方法要好很多,但是有些方法在getHibernateTemplate()並沒有提供,這時我們用HibernateCallback 回撥的方法管理資料庫.

    例如如下程式碼:

    /**

    * 使用 hql 語句進行操作

    * @param hql HSQL 查詢語句(使用回撥函式訪問外部變數,必須是final的)

    * @param offset 開始取資料的下標

    * @param length 讀取資料記錄數

    * @return List 結果集

    */

    public List getListForPage ( final String hql , final int offset , final int length ) {

    List list = getHibernateTemplate().executeFind ( new HibernateCallback ( ) {

    public Object doInHibernate ( Session session ) throws HibernateException, SQLException {

    Query query = session.createQuery ( hql ) ;

    query.setFirstResult ( offset ) ;

    query.setMaxResults ( length ) ;

    List list = query.list ( ) ;

    return list ;

    }

    }) ;

    return list ;

    }

  • 中秋節和大豐收的關聯?
  • 你認為《瘋狂的外星人》的票房會超過28億嗎?為什麼?