在spring中对属性文件中的hibernate查询或sql查询进行外部化

时间:2013-08-24 11:51:13

标签: java sql spring hibernate spring-mvc

我正在Eclipse中开发Web应用程序和Hibernate。 我想在属性文件中存储我的Hibernate查询或Sql查询,然后在DAO中使用它。 请告诉我怎么做? 我正在使用通用DAO,有没有办法进行通用查询? 后来我想存储其他内容,如页面链接,标题也在属性文件中。

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

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

我正在使用

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

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

DAO

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();

    }


}

1 个答案:

答案 0 :(得分: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>
相关问题