我有一個春天的MVC應用程序,我如何返回用戶列表並限制結果?使用spring getHibernateTemplate,我如何獲得用戶列表並限制結果集?
我userDAO的樣子:
public List<User> getUsers(int limit) {
return super.getHibernateTemplate()????
}
我有一個春天的MVC應用程序,我如何返回用戶列表並限制結果?使用spring getHibernateTemplate,我如何獲得用戶列表並限制結果集?
我userDAO的樣子:
public List<User> getUsers(int limit) {
return super.getHibernateTemplate()????
}
我假設你正在做這個分頁的目的。
您可以創建一個查詢,並使用setMaxResults和setFirstResult:
public List<User> getUsers(int limit)
{
Query q = getHibernateTemplate().getSession().createQuery("from User");
q.setFirstResult(0); // modify this to adjust paging
q.setMaxResults(limit);
return (List<User>) q.list();
}
或者,使用HibernateCallback(這可能是最好的方法,雖然它的wordier):
return getHibernateTemplate().executeFind(new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException, SQLException {
Query q = session.createQuery("from User");
q.setMaxResults(limit);
return q.list();
}
});
哪樣另外照顧你的例外翻譯。這裏
檢查,看一個HibernateTemplate可用的方法: http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/orm/hibernate3/HibernateTemplate.html
根據您想如何查詢,有幾個不同的查找方法返回一個列表。
find(String queryString)將讓您運行特定的HQL查詢並返回結果列表。
loadAll(Class entityClass)將返回映射類的所有實例的列表,您可以自己對其進行過濾。
無論哪種方式我會玩弄文檔中的方法來習慣HibernateTemplate。
如果你只是想「從用戶中選擇*」,請確保你已經映射了User類和getHibernateTemplate.loadAll(User.class);
這不允許設置限制。在Hibernate 3 HQL中,LIMIT明確地不支持**,並且它僅在偶爾使用2。 –
如果您想使用的HibernateTemplate你可以做這樣的事情:
@SuppressWarnings("unchecked")
public List<User> getUsers(final int limit) {
return getHibernateTemplate().executeFind(new HibernateCallback<List<User>>() {
@Override
public List<User> doInHibernate(Session session) throws HibernateException, SQLException {
return session.createCriteria(User.class).setMaxResults(limit).list();
}
});
}
@SuppressWarnings("unchecked")
public List<User> getUsers(final int limit) {
return getHibernateTemplate().executeFind(new HibernateCallback<List<User>>() {
@Override
public List<User> doInHibernate(Session session) throws HibernateException, SQLException {
return session.createQuery("from User u").setMaxResults(limit).list();
}
});
}
其實它不建議再使用Hibernate的模板。您應該注入SessionFactory並調用SessionFactory.getCurrentSession()。 Here是關於如何設置它的更多信息。而here就是爲什麼你應該比HibernateTemplate更喜歡SessionFactory。
有關單元測試的任何提示?鏈接?謝謝! – Blankman
要測試DAO的客戶端,您應該使用以下某些模擬DAO:[Mockito](http://code.google.com/p/mockito/),[JMock](http://www.jmock.org/ ),[EasyMock](http://easymock.org/)等。爲了測試DAO類本身,請注意[DBUnit](http://dbunit.sourceforge.net/)加載數據並比較ResultSets,[Spring TestContext框架](http://static.springsource.org/spring/docs/2.5.x/reference/testing.html#testcontext-framework)及其[支持事務](http:// static。 springsource.org/spring/docs/2.5.x/reference/testing.html#testcontext-tx)。 – szhem
對於簡單的DAO測試,您還可以使用一些內存數據庫:[Derby](http://db.apache.org/derby/),[HSQLDB](http://hsqldb.org/)。在這種情況下,你將不得不改變這種測試的休眠方言。我建議使用等於生產數據庫的數據庫。在這種情況下,您將能夠使用供應商特定的數據庫功能。還有一個強大的庫支持DAO集成測試的許多功能:[Unitils](http://www.unitils.org/summary.html) – szhem
我必須發佈會話嗎? getSession和gethibernatetemplate有什麼區別? – Blankman
我只想這樣做:select * from users; (以及啓動/限制過濾器)。 – Blankman
@Blankman對不起,我忘了在裏面包含getHibernateTemplate()。 –