`
yaerfeng1989
  • 浏览: 232762 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

通过velocity模板和Hibernate sql-query的实现动态hql

阅读更多

在开发的时候,很多时候都遇到过需要动态拼写SQL,有的是在配置文件中写SQL,有的是在Java代码中拼写SQL,以配置文件拼SQL的可以拿IBatis为代表,但是很多时候是使用Hibernate的,这个时候就想要是Hibernate能像IBatis那样写就好了。

原创不易,转载请注明出处:通过velocity模板和Hibernate sql-query的实现动态hql

代码下载:http://www.zuidaima.com/share/1723627800005632.htm

这个时候就想到了模板语言和配置文件的结合。模板引擎可以选择Velocity,简单而不失强大,配置文件可以模仿Hibernate的sql-query 的XML文件。

Sql-query的示例代码如下(SQL or HQL):

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dynamic-hibernate PUBLIC "-//ANYFRAME//DTD DYNAMIC-HIBERNATE//EN"
"http://www.anyframejava.org/dtd/anyframe-dynamic-hibernate-mapping-4.0.dtd">
<dynamic-hibernate>
    <query name="selectUserSQL">
        <![CDATA[
            SELECT  USER_ID,NAME
            FROM zuidaima_com_user Where 1=1
            #if($name && $name.length() > 1)
             AND name =:name
            #end
    ]]>
    </query>
    <query name="selectUserHQL">
    <![CDATA[
         FROM zuidaima_com_users
        Where 1=1
            #if($name && $name.length() > 1)
                AND name =:name
            #end
        ]]>
    </query>

 在系统加载时,需要把配置文件加载到系统中。加载代码关键部分如下:

package com.zuidaima.util
public class DynamicHibernateImpl implements InitializingBean, ResourceLoaderAware, ApplicationContextAware{
        public void afterPropertiesSet() throws Exception {
           for (int i = 0; i < fileNames.size(); i++) {
              String fileName = ((String) fileNames.get(i)).trim();
              if (resourceLoader instanceof ResourcePatternResolver) {                
                try {
                     Resource[] resources=         ((ResourcePatternResolver) resourceLoader).getResources(fileName);
                    buildHQLMap(resources);
                  } catch (IOException ex) {
                     throw new Exception("Could not resolve sql definition resource pattern ["                     + fileName + "]", ex);
                 }
             } else {               
                 Resource resource = resourceLoader.getResource(fileName);
                 buildHQLMap(new Resource[] { resource });
             }
         }
     }
  protected void buildHQLMap(Resource[] resources) throws Exception {
         for (int i = 0; i < resources.length; i++) {
             buildHQLMap(resources[i]);
         }
     }
  private void buildHQLMap(Resource resource) throws Exception {
         try {
             InputSource inputSource = new InputSource(resource.getInputStream());
             org.w3c.dom.Document doc = this.documentLoader.loadDocument(inputSource, null, null, org.springframework.util.xml.XmlValidationModeDetector.VALIDATION_NONE, false);
             Element root = doc.getDocumentElement();
             List<Element> querys = DomUtils.getChildElements(root);
             for(Element query:querys){
                 String queryName = query.getAttribute("name");
                 if (StringUtils.isEmpty(queryName)) {
                     throw new Exception("DynamicHibernate Service : name is essential attribute in a <query>.");
                 }
                 if(statements.containsKey(queryName)){
                     throw new Exception("DynamicHibernate Service : duplicated query in a <query>."+queryName);
                 }
                 statements.put(queryName, DomUtils.getTextValue(query));
             }
         } catch (SAXParseException se) {
             throw se;
         } catch (IOException ioe) {
             throw ioe;
         }
     }

 

1
2
分享到:
评论

相关推荐

    Hibernate HQL 结合 velocity

    通过Velocity,我们可以将HQL查询的结果动态地插入到模板中,生成动态页面。 将Hibernate HQL与Velocity结合使用,通常包括以下几个步骤: 1. **执行HQL查询**:在Java代码中,使用`Session`对象的`createQuery()`...

    velocity spring jpa hibernate 整合

    Velocity模板语言(VTL)简洁易用,通过$和#符号来调用变量和控制结构。 2. **Spring**:Spring是Java企业级应用开发的主流框架,提供了依赖注入(DI)、面向切面编程(AOP)、事务管理等核心功能。Spring的IoC容器...

    springmvc4+hibernate4+velocity1.7jar包

    Spring MVC、Hibernate 和 Velocity 是三个在Java开发中广泛使用的开源框架,它们分别专注于Web应用程序的模型-视图-控制器(MVC)架构、对象关系映射(ORM)以及模板引擎。下面将详细介绍这三个框架以及它们整合...

    spring和hibernate jar包

    - **HQL和QBC**:Hibernate Query Language (HQL) 是面向对象的查询语言,类似SQL。Criteria API(Query By Criteria)提供了另一种方式构建动态查询。 - **缓存机制**:支持一级缓存和二级缓存,提高性能,减少...

    j2ee:Struts2-Hibernate-Spring

    它还提供了Criteria查询、HQL(Hibernate Query Language)等高级查询方式,增强了数据操作的灵活性。 **Spring** 框架是Java企业级应用的核心,它不仅仅是一个简单的MVC框架,而是提供了全面的解决方案,包括依赖...

    ssh+velocity+annotation包源

    - **HQL(Hibernate Query Language)**:Hibernate特有的查询语言,类似于SQL,但更加面向对象。 4. **Velocity模板引擎**: - **模板语法**:Velocity使用#和$符号进行指令和变量引用,例如#{if}条件判断,${...

    struts2+spring2+hibernate3+velocity+sitemesh集成框架代码

    Hibernate3引入了HQL(Hibernate Query Language),类似于SQL,但面向对象。它还提供了Criteria查询、SessionFactory和Session接口,提高了数据操作的效率和灵活性。 4. **Velocity**:Velocity是一个用于生成动态...

    整合Spring3.1.0.RC1,Struts2.2.3和Hibernate3.2三大框架所需jar包

    - **模板技术**:支持FreeMarker、Velocity等模板引擎,方便生成动态视图。 3. **Hibernate3.2**: - **对象关系映射(ORM)**:Hibernate是Java领域中最流行的ORM框架之一,它将数据库表映射为Java类,简化了...

    struts2.0和hibernate 共2类JAR包

    5. **查询语言HQL**:Hibernate Query Language是面向对象的查询语言,类似于SQL,但更易于理解和使用。 6. **Criteria API**:提供了一种动态构建查询的API,使得在运行时构建复杂的查询成为可能。 当这两个框架...

    Struts2,Spring,Hibernate jar包下载

    HibernateJar包包含了Hibernate的核心API,如Session、SessionFactory、Query等,以及JPA支持和HQL(Hibernate Query Language)等。通过配置文件,开发者可以定义实体类和数据库表之间的映射关系,实现数据的自动...

    论坛系统(Struts 2+Hibernate+Spring实现)

    它支持HQL(Hibernate Query Language),一种类似于SQL的语言,使查询更加便捷。在论坛系统中,Hibernate 可能用于管理用户信息、帖子、评论等数据的持久化。 **Spring** 框架是Java企业级应用的核心组件,它提供...

    SpringMVC+Hibernate

    Hibernate还提供了HQL(Hibernate Query Language),一种面向对象的查询语言,与SQL类似但更贴近Java对象。 Velocity是一个快速、简单且强大的模板引擎,它的目标是使开发者能够专注于内容,而不是HTML布局。在...

    SSHAPI,绝对chm格式,包括Hibernate,spring2.0,struts-2

    Struts2集成了许多其他框架和库,如Freemarker和Velocity模板引擎,OGNL表达式语言,以及拦截器(Interceptor)机制,使得开发者能够实现复杂的应用逻辑。 在SSHAPI的CHM文件中,你将找到这三个框架的详细API文档,...

    Franciscus Gurovich - Hibernate and Struts

    - **查询语言**:Hibernate提供了HQL(Hibernate Query Language)和Criteria API,使得数据查询更加灵活和强大。 - **缓存机制**:Hibernate支持二级缓存,可以显著提高应用程序的性能。 - **事务管理**:Hibernate...

    开发hibernate完整的必须的jar包,在您的开发之初帮助你

    在Hibernate中,它用于解析HQL(Hibernate Query Language)和JPQL(Java Persistence Query Language)。 7. **velocity-1.5.jar**:Velocity是一个基于Java的模板引擎,常用于生成动态网页内容。在Hibernate中,...

    struts2整合hibernate的网上商城源码

    - **HQL(Hibernate Query Language)**:Hibernate 提供了自己的查询语言,类似于SQL,用于在Java代码中对数据库进行操作。 3. **整合Struts2和Hibernate**: - **数据访问对象(DAO)**:在业务逻辑层,通常会...

    strus2+hibernate论坛项目

    通过Criteria、HQL(Hibernate Query Language)或JPQL(Java Persistence Query Language),开发者可以方便地进行复杂查询。 在BBS论坛项目中,Struts2和Hibernate协同工作,为用户提供高效、稳定的服务。例如,...

    基于Spring+JPA+Velocity+Ehcache的商城系统源码.zip

    它具有强大的查询语言HQL(Hibernate Query Language)和 Criteria API,能更灵活地进行数据库查询。 **Velocity模板引擎**: Velocity是Apache软件基金会的一个开源项目,它是一个轻量级的Java模板引擎,用于生成...

    struts2+spring+hibernate+oracle 需要用到的基本jar包

    - Hibernate支持HQL(Hibernate Query Language),提供面向对象的查询方式,同时也支持SQL原生查询。 - 它提供了一对一、一对多、多对多等各种关系映射以及缓存机制,提高了数据访问效率。 4. **Oracle数据库**...

    基于struts2+Hibernate3的网上书店

    它还提供了查询语言HQL(Hibernate Query Language),与SQL类似但更面向对象,可以方便地进行复杂的数据库查询。 **网上书店系统实现** 结合Struts2和Hibernate3,可以构建出高效且易于维护的网上书店系统。系统的...

Global site tag (gtag.js) - Google Analytics