0

我在我的 Eclipse 中使用 Spring 和 Hibernate 开发 Web 应用程序。我想将我的 Hibernate 查询或 Sql 查询存储在属性文件中,然后在 DAO 中使用它。请让我知道该怎么做?我正在使用通用 DAO ,有什么方法可以进行通用查询吗?稍后我想在属性文件中存储其他内容,如页面链接、标题。

所以基本上是三个相互关联的问题。

因为我想不出任何方法来进行通用查询所以我在具体类中重写了 findAll() 方法。

我在用

<context:property-placeholder location="classpath:properties/database.properties"/>

加载属性。但问题是如何使用它来获取java代码或类文件中的hql?

public abstract class AbstractHibernateDAO<T extends Serializable> {

    public Class<T> clazz;//class object reference

    protected SessionFactory mysessionFactory;

public void setClazz(final Class<T> clazzToSet) {
        this.clazz = clazzToSet;
    }

protected Session getCurrentSession() {

        return mysessionFactory.getCurrentSession();
    }

@SuppressWarnings("unchecked")
    public List<T> findAll() {
        return getCurrentSession().createQuery("from " + clazz.getName()).list();
    }

我的具体 DAO

@Repository("categDAO")
@Scope(proxyMode = ScopedProxyMode.TARGET_CLASS,value="request")
public class CategoryDAO extends AbstractHibernateDAO<category_pojo>{

    public CategoryDAO() {

        setClazz(category_pojo.class);
    }

    @Override
    public category_pojo findOneByName(String name) {
        return (category_pojo) getCurrentSession().createQuery("from "+clazz.getName()+" where categoryName=:name").setParameter("name",name).uniqueResult();

    }


}
4

1 回答 1

0

如果我理解正确,这听起来像是常规的 Spring 用法。

您可能有这样的课程:

class userDao {

    String findActiveUsers;
    //... Getters and Setters

    public List<User> findActiveUsers() {
        return getCurrentSession().createQuery(findActiveUsers).list();
    }
}

因此,您的应用程序上下文将如下所示:

<bean id="userDao" class="my.package.UserDao">
    <property name="findActiveUsers" value="FROM User u WHERE u.active=true"/>
</bean>
于 2013-08-24T12:49:45.057 回答