【问题标题】:externalize hibernate queries or sql queries in properties file in spring在spring的属性文件中外部化hibernate查询或sql查询
【发布时间】:2013-08-24 11:51:13
【问题描述】:

我正在 Spring 中开发 Web 应用程序,并在我的 Eclipse 中开发 Hibernate。 我想将我的 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();

    }


}

【问题讨论】:

  • 你见过如何在春季使用@Value 吗?检查这个:static.springsource.org/spring/docs/3.0.x/javadoc-api/org/…
  • @value 用于初始化我想要实现的变量是不同的。例如采取这个私有 @Value("${xprnOffset}") int expirationOffset;
  • 您愿意在属性文件中对查询进行硬编码吗?
  • 我想要实现的是将查询放在外部文件中。这样其他用户就可以在不访问代码的情况下使用它。
  • 好的。所以基本上你要做的就是创建一个 .properties 文件,例如:SELECT_QUERY : select * from table。从您的 DAO 访问查询,例如 @VALUE['propertyBean("SELECT_QUERY")'] public String Select_Query 使用创建的字符串传递查询。您需要做的就是创建一个属性 bean。在这里查看参考:blog.csanchez.org/2005/06/30/…

标签: java sql spring hibernate spring-mvc


【解决方案1】:

如果我没听错的话,这听起来像是 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>

【讨论】:

  • 这似乎是另一种方式。但我认为它不应该在我的情况下使用,因为我的目的不是接触类文件(DAO)或bean配置文件(应用程序上下文)。我想要外部化 .properties 文件中的查询。
  • 外部化到属性文件很容易实现:static.springsource.org/spring/docs/3.0.x/…
  • 如果您不能更改应用程序上下文和 DAO...
  • 我正在使用 加载属性。但问题是如何使用它来获取java代码中的hql或类文件?
猜你喜欢
  • 1970-01-01
  • 2023-04-10
  • 2014-10-22
  • 1970-01-01
  • 1970-01-01
  • 2017-12-07
  • 2016-10-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多