使用spring getHibernateTemplate,如何获取用户列表并限制结果集?

Bla*_*man 3 java spring hibernate spring-mvc

我有一个spring MVC应用程序,如何返回用户列表并限制结果?

我的UserDao看起来像:

public List<User> getUsers(int limit) {
  return super.getHibernateTemplate()????
}
Run Code Online (Sandbox Code Playgroud)

Sco*_*t A 7

我假设你这样做是为了分页.

您可以创建一个Query并使用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();
}
Run Code Online (Sandbox Code Playgroud)

或者,使用HibernateCallback(这可能是最好的方法,虽然它更啰嗦):

    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();
        }
    });
Run Code Online (Sandbox Code Playgroud)

其中还将为您处理异常翻译.


szh*_*hem 5

如果您想使用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();
        }
    });
}
Run Code Online (Sandbox Code Playgroud)
@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();
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

实际上不建议再使用hibernate模板了.您应该注入SessionFactory并调用SessionFactory.getCurrentSession().以下是有关如何设置它的更多信息.而这里就是为什么你应该更喜欢过的SessionFactory的HibernateTemplate.