`
benbencen
  • 浏览: 4384 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

hibernate 查询语句统一配置管理

阅读更多

      你以前所参与的项目里面,SQL、HQL,是否满天飞呢?在逻辑层,显示层那里都可以看到随手写的查询语句?这样的做法极度的破坏了分层的架构,无论如何的XP也应该遵循一定的管理与规范,那么统一管理查询语句的重要性就凸现了。

      统一管理查询语句有何优点?

      1、保持系统的分层架构,管理语句是持久层的责任,由它自己管理是最适合不过。松散的耦合总是我们向往的目标。

      2、统一管理方便修改,可以减小人手修改带来的低级错误。

     

      OK,接下来要考虑如何管理这些语句来了。

      1、配置文件管理

      在hibernate的mapping文件内使用<query>     

<query name='findUserById'> 
     from User eo where eo.id = ? 
</query>

      <query>里面就是要使用的hql语句 属性name就是语句保存在容器里的别名。

    

      在hibernate的mapping文件内使用<sql-query>    

<sql-query name="findUserByName"> 
     <return alias="user" class="hibernate.entity.User"/> 
               SELECT user.id AS {user.id}, 
                            user.name AS {user.name} 
               FROM t_user user WHERE user.name = ? 
</sql-query>

     <sql-query>里面的语句必须是sql语句,属性name就是语句保存在容器里的别名,<reruen>里面的东东标明了返回对象的类型与别名,别名主要用于对应sql里面{}的内容。

   

      写好mapping文件后当然要告诉hibernate将这些语句加入到容器里面咯,配置方法有很多种,这里只列了使用spring结合hibernate的配置方式,在SessionFactoryBean的配置里面加入     

<property name="mappingLocations"> 
       <list> 
           <value> 
                classpath:hbm/name-query.hbm.xml 
           </value> 
       </list>
</property>



    <sql-query>的使用比较复杂,所以不是遇到复杂的跨表查询时,不推荐使用。

     

 

     2、标签管理

       一般的习惯都是使用@NamedQueries将与自己相关的语句统一在实体里面,如查询User的语句都是放到User对象里面

@Entity
@Table(name = "t_user") 
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE) @NamedQueries( { 
       @NamedQuery(name = "User.findById", 
               query = "FROM User eo where eo.id=? ") }) 
public class User implements java.io.Serializable { 
                
                private int id; 
         
                private String name;

     使用标签管理可以比较好的分类查询语句,也不用搞麻烦的配置文件,虽然说修改配置文件的查询语句可以不用重新编译就能生效,但是查询语句修改也不会十分频繁,所以标签管理是一个不错的选择。

 

      或者以上的方式都不喜欢,你甚至可以自己写统一管理查询语句的文件,手工注入到你的系统容器内,在DAO层写一套自己的NamQuery也是可以的。萝卜青菜,各有所爱,每个人都会有自己习惯的管理方式,但无论方式是什么,起码有这种想法都是好的。

 

 

 

 

分享到:
评论
5 楼 daquan198163 2008-08-05  
benbencen 写道
回“daquan198163”:
你好,我倾向于将查询语句用annotation放到各自的实体里面。其实只要基类的DAO扩展的好一点,除了复杂的查询外都可以直接用DAO完成CRUD,这样每个实体语句的数量都是极小的。我觉得花费在统一维护语句的工作量绝对可以在语句重用与减小错误的方面翻倍的取回来。

有些hql的归属是比较模糊的,将来就不确定到哪个实体里去找
4 楼 benbencen 2008-08-02  
回“laiseeme”:
你好,本文只是从管理语句的角度出发讨论,都是围绕NameQuery的,并没有将DAO的东东牵涉进来,其实你完全可以写一个完备的DAO基类来实现简单的CRUD,再配合NameQuery的使用。
3 楼 benbencen 2008-08-02  
回“daquan198163”:
你好,我倾向于将查询语句用annotation放到各自的实体里面。其实只要基类的DAO扩展的好一点,除了复杂的查询外都可以直接用DAO完成CRUD,这样每个实体语句的数量都是极小的。我觉得花费在统一维护语句的工作量绝对可以在语句重用与减小错误的方面翻倍的取回来。
2 楼 daquan198163 2008-08-01  
于是当你要看一个DAO的查询逻辑时,还得打开配置文件
用过一段时间 namedquery,觉得比较麻烦,不够pragmatic
1 楼 laiseeme 2008-08-01  
还是习惯在dao曾弄  你这个也不能集成啥的  比如大家公用基类的crud

相关推荐

    Hibernate查询语句统一配置管理.doc

    本文主要探讨了在使用Hibernate框架进行Java开发时,如何实现查询语句的统一配置管理,以提高代码的可维护性和遵循良好的软件工程实践。统一管理查询语句可以保持系统的分层架构,降低模块间的耦合度,并简化查询...

    spring和hibernate整合的优化配置

    - **统一管理**:Spring框架可以统一管理应用程序中的所有对象,包括Hibernate SessionFactory等。 - **事务管理**:通过Spring的声明式事务管理机制,可以更方便地控制业务逻辑中的事务边界。 - **配置简化**:...

    Hibernate可选配置大全

    ### Hibernate可选配置详解 #### 一、Hibernate配置项概览 Hibernate作为一款优秀的Java持久层框架,提供了丰富的配置选项,以适应不同场景下的需求。本文档将详细解析Hibernate的各种可选配置,帮助开发者深入...

    hibernate与spring整合demo

    3. 配置简化:Spring可以统一管理Hibernate的SessionFactory和Session,简化配置文件。 4. AOP集成:Spring的AOP可以与Hibernate的事务管理结合,提供更灵活的事务策略。 四、整合步骤 1. 引入依赖:在项目中添加...

    hibernate配置参数详解

    这个配置项指定了Hibernate使用的数据库方言,以生成符合特定数据库的SQL语句。 #### 三、其他核心配置 此外,还有许多其他的配置项可以帮助优化Hibernate的性能或定制其行为,如: 1. **`hibernate.dialect`**:...

    解决Hibernate对于Date类型的数据返回结果中时分秒不对的问题

    - **使用SQL查询**:在查询时,直接使用SQL语句来获取日期时间,避免Hibernate的自动转换。 - **自定义Type**:创建自定义的Hibernate类型,覆盖默认的日期时间处理方式,以满足特定需求。 以上就是关于"解决...

    hibernate所有开发包

    1. Hibernate支持编程式事务管理和声明式事务管理,可以配合Spring等框架实现事务的统一管理。 七、Annotation使用 1. Annotation配置比XML配置更简洁,直接在实体类上定义属性,无需编写额外的映射文件。 2. 使用...

    Struts+hibernate图书管理系统(详细)

    Hibernate.cfg.xml是配置文件,配置了数据库连接等信息。 总的来说,Struts+Hibernate的结合在图书管理系统中起到了关键作用,它们使系统具备良好的架构,易于扩展和维护。Struts通过Action和ActionForm处理用户...

    Spring+SpringMVC+Hibernate+Maven框架搭建及配置文件源码

    通过Hibernate,开发者可以使用面向对象的方式来操作数据库,无需编写大量的SQL语句。 Hibernate支持实体类、表映射、一对多、多对一、多对多等各种关系的映射,以及懒加载、缓存机制等高级特性。 **Maven** Maven...

    struts2、hibernate和spring框架整合所需的jar以及配置文档

    Spring还集成了其他框架,包括Struts2和Hibernate,提供了统一的事务管理策略,使得在多个框架间协调工作变得更加简单。 在SSH整合过程中,你需要以下关键的jar包: 1. **Struts2** 相关的jar:包括`struts2-core....

    Hibernate和spring集成

    Spring将Hibernate的异常转换为Spring的`DataAccessException`系列异常,使得异常处理更加统一。 10. **测试与调试** 在集成环境中,我们可以使用Spring的`TestContextFramework`进行单元测试,它能够自动配置...

    hibernate动态数据库改进版

    合理设计和缓存查询语句,以及对查询结果进行缓存,都是提升性能的有效手段。 4.3 模块化设计 为了提高代码的可维护性和复用性,可以将动态数据库操作封装成独立的服务或组件,提供统一的接口供其他模块调用。 ...

    java订单管理系统,使用springMVC、hibernate、jui实现

    在订单管理系统中,Hibernate通过实体类和配置文件,自动处理SQL语句,减少了开发者对数据库操作的繁琐工作。它可以轻松地进行数据的增删改查,支持事务管理和缓存机制,提高了数据访问的性能。 JUI,全称Java User...

    strutr hibernate spring 开发的海关管理系统源码

    在海关管理系统中,Hibernate用于管理数据库交互,通过实体类与数据库表进行绑定,提供了一种无需编写大量SQL语句的方式来操作数据。Hibernate的核心配置文件(hibernate.cfg.xml)定义了数据库连接信息,实体类通过...

    Hibernate PDf

    - **事务管理**:Hibernate提供了统一的事务管理机制,可以方便地处理复杂的事务逻辑。 ### 使用Hibernate的步骤 1. **环境搭建**:首先需要配置好JDBC驱动,建立数据库连接,并导入Hibernate相关的jar包。 2. **...

    java私塾独家首发最新Hibernate4教程

    - **查询语言**:支持HQL(Hibernate Query Language)和原生SQL查询。 **1.4 Hibernate4体系结构** Hibernate4的核心模块包括Session、SessionFactory、Transaction等。其中SessionFactory是创建Session的工厂,...

    jta hibernate spring 集成 代码和说明

    3. **配置Hibernate**:在Hibernate的配置文件中,设置`hibernate.transaction.jta.platform`属性为Spring的`PlatformTransactionManager`实现,让Hibernate知道使用Spring管理事务。 4. **声明式事务管理**:在...

    hibernate框架完整包

    在Hibernate中,DOM4J用于解析和生成XML配置文件,如Hibernate的映射文件(.hbm.xml),以及处理HQL查询结果。 5. **其他组件**:除了上述核心组件,这个完整包可能还包括Hibernate的其他辅助库,如JTA(Java ...

    基于struts2+hibernate的洗车行会员管理系统

    1. **自动持久化**:通过注解或XML配置,Hibernate能自动将Java对象映射到数据库表,无需手动编写SQL语句。 2. **对象查询语言(HQL)**:HQL允许开发者使用面向对象的语法进行数据库查询,降低了SQL的依赖性。 3. *...

    spring3 hibernate4 ehcache实例

    同时,还需要配置数据源、Hibernate的属性,如hibernate.dialect(数据库方言)、hibernate.show_sql(是否显示SQL语句)等。 2. **Ehcache集成** 首先,引入Ehcache的jar包,然后在Spring配置文件中声明...

Global site tag (gtag.js) - Google Analytics