當前位置:編程學習大全網 - 遊戲軟體 - HibernateDaoSupport中的方法

HibernateDaoSupport中的方法

兩者基本都是差不多,要說區別的話,有兩點:1.loadAll()不進行分頁,findByCriteria()可以進行分頁,2.傳入的參數不壹樣,loadAll()傳入是壹個實體類,另壹個傳入的是Criteria(條件)。其次兩者具體實現方式基本壹樣,都會調用:prepareCriteria(Criteria criteria)方法,如下:

protected void prepareCriteria(Criteria criteria) {

if (isCacheQueries()) {

criteria.setCacheable(true);

if (getQueryCacheRegion() != null) {

criteria.setCacheRegion(getQueryCacheRegion());

}

}

if (getFetchSize() > 0) {

criteria.setFetchSize(getFetchSize());

}

if (getMaxResults() > 0) {

criteria.setMaxResults(getMaxResults());

}

SessionFactoryUtils.applyTransactionTimeout(criteria, getSessionFactory());

}

loadAll()方法具體實現:

public <T> List<T> loadAll(final Class<T> entityClass) throws DataAccessException {

return executeWithNativeSession(new HibernateCallback<List<T>>() {

@SuppressWarnings("unchecked")

public List<T> doInHibernate(Session session) throws HibernateException {

Criteria criteria = session.createCriteria(entityClass);

criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);

prepareCriteria(criteria);

return criteria.list();

}

});

}

findByCriteria()具體實現如下:

public List findByCriteria(final DetachedCriteria criteria, final int firstResult, final int maxResults)

throws DataAccessException {

Assert.notNull(criteria, "DetachedCriteria must not be null");

return executeWithNativeSession(new HibernateCallback<List>() {

public List doInHibernate(Session session) throws HibernateException {

Criteria executableCriteria = criteria.getExecutableCriteria(session);

prepareCriteria(executableCriteria);

if (firstResult >= 0) {

executableCriteria.setFirstResult(firstResult);

}

if (maxResults > 0) {

executableCriteria.setMaxResults(maxResults);

}

return executableCriteria.list();

}

});

}

基本壹致。兩者都會先去看緩存裏有沒有,如果沒有再去查詢數據庫。還請多看下源碼。謝謝

  • 上一篇:嵌入式系統中的嵌入式是什麽意思
  • 下一篇:關於兒童的古詩。
  • copyright 2024編程學習大全網