【发布时间】: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