`

想看Hibernate生成的SQL语句?

阅读更多

     近段时间工作中开始大面积使用hibernate了,在使用过程中难免有这样那样的问题,问题出来后怎么解决,当然首先是跟同事商量,毕竟这样的效率最高,若同事忙或别的什么原因,上网查有没有类似的问题,别人是怎么解决的, 不过有时这个也是不太方便的,虽说现在搜索这么发达,但在短时间内搜到一个不错解决方案也很不容易。 于是就逼着自己去想别的途径。

     查看源码是个不错的选择。
     当然查看生成的sql语句,hibernate本身也是支持的,可以通过配置show_sql=true让sql在控制台上显示,不过这个方法很不方便, 毕竟还得改那个配置,而且这个sql也只是在控制台上显示出来,咱们也不能真正看到它活生生地应用.


     我在这里介绍的是通过在源码中设置断点来"追踪""现场版"的sql.

     至于怎么来配置源码,怎么设置断点,在这也就不用多说了吧。


     在这些天解决问题过程中, 我无意中发现了怎么来查看hibernate生成sql的方法,本着“予人余

香,手留玫瑰”的原则,写在这里,又好久没写博客了。

 

     hibernate自身的一些概念,就不在这多说了,下面就直奔主题吧,呵呵,其实也说了不少废话了




     在org.hibernate.loader.Loader类的里找到prepareQueryStatement方法,这个方法里有这么一句

调用:

     String sql = queryParameters.getFilteredSQL();  

     这里的变量sql里就是生成的SQL语句了,
     如下图所示:

     hibernate生成的sql

            当然这不是最终的sql,图片中也看到了,接下来,hibernate会根据具体的数据库dialect再对这个sql做进一步的处理.

 

     至此, 我们看到了"活生生"的sql.

 

     下面顺便也说个关于跟踪源码的题外话,其实看hibernate的源码也有好久一段时间了, 但像今天看到生成的sql这样很实用的心得倒不是很多. 当然这样说,我的意思不是说,看hibernate源码就没什么用了, 在这我想说的是,有些时候, 能抓住很实用的东西是需要积累的. 现在感觉这个过程就像玩扫雷这个小游戏, 在刚开始玩时, 总是摸不着头绪, 可能没点几下就中了头彩, 于是尤其在刚开始时,我们大多是乱点一起, 点了两三下后发现自己还"活"着, 就开始认定地顺着局势分析了. 在刚开始看hibernate源码时,也有类似的经历,hibernate那么多包,又有那多么类,该看哪一个呢?该如何走呢?  这么一团乱麻,这怎么看呀? 但怀着对hibernate作者的崇拜,心里也还是好奇,从Object到Relational这样的mapping过程究竟是怎么自动实现的.于是就东看一个类,西看一个类地进行着.后来再结合IDE的debug功能, 看这些类是怎么配合合作的.这样积累下来,终于有了今天这个实用.

 

    那这个技巧在实际解决问题中又是怎么实用呢?请看下一篇,用<用在hibernate里用Projection里的一个问题>,呵呵,看百家讲坛有点多了.
   

  • 大小: 22.2 KB
3
0
分享到:
评论
7 楼 ifox 2012-03-21  
rmn190 写道
ifox 写道
如何查看?
我试了下断点,到那的时候提示Can't be resolve



Can't be resolve? 是不是所用的jar跟源码的版本号不一致?


额,不太懂是什么意思。。。
可以详细点么?
6 楼 rmn190 2012-03-19  
ifox 写道
如何查看?
我试了下断点,到那的时候提示Can't be resolve



Can't be resolve? 是不是所用的jar跟源码的版本号不一致?
5 楼 ifox 2012-03-15  
如何查看?
我试了下断点,到那的时候提示Can't be resolve
4 楼 ifox 2012-03-14  
大哥,如何像你那样在debug模式下看到sql语句?
这个真不懂,昨天搞到现在都没有,搞好。希望能指点下。。。
我的QQ是:136600095
3 楼 pstinghua 2008-10-20  
 
2 楼 flyinweb 2008-10-19  
p6spy
1 楼 dayang2001911 2008-10-19  
可以结合《hibernate in action》再看看代码吧

相关推荐

    Hibernate生产SQL语句

    本文将深入探讨如何模仿Hibernate生成SQL语句,以及如何利用Java反射技术来实现这一过程。 首先,我们需要理解Hibernate的工作原理。Hibernate的核心在于它的Query API,它提供了Criteria、HQL(Hibernate Query ...

    让hibernate输出sql语句参数配置.doc

    hibernate.dialect 是一个 Hibernate Dialect 类名,允许 Hibernate 针对特定的关系数据库生成优化的 SQL。其取值为 full.classname.of.Dialect。 2. hibernate.show_sql hibernate.show_sql 参数用于输出所有 SQL...

    hibernate显示不带?的完整sql

    在开发过程中,为了调试和优化SQL查询,有时我们需要查看Hibernate生成的完整SQL语句,包括其参数值。通常,Hibernate默认输出的SQL语句会用问号(?)作为占位符,这在理解查询逻辑时可能会带来不便。本文将详细介绍...

    采用p6spy完整显示hibernate的SQL语句

    P6Spy是一个开源的JDBC代理库,它允许我们监控并记录应用通过JDBC执行的所有数据库操作,包括那些由Hibernate生成的SQL语句。它不仅可以提供完整的SQL语句,还能够提供执行时间、性能指标等详细信息,这对于优化...

    使用p6spy完整显示hibernate的SQL语句

    这篇博客“使用p6spy完整显示hibernate的SQL语句”可能详细解释了如何配置和使用p6spy来跟踪Hibernate生成并执行的SQL。 首先,`p6spy`是一个Java数据库代理库,它可以拦截并记录所有通过JDBC发送到数据库的SQL语句...

    excel生成sql语句和实体类代码生成器

    "Excel生成SQL语句和实体类代码生成器"就是一个这样的实用工具,它允许开发者通过Excel表格来快速构建数据库操作所需的SQL语句以及与之对应的Java实体类代码,大大减少了手动编写这些代码的时间。 这个工具的核心...

    Hibernate使用xdoclet生成映射文件和sql语句

    XDoclet是早期的一个工具,用于自动生成Hibernate的映射文件(.hbm.xml)和SQL语句,这样开发者无需手动编写这些文件,提高了开发效率。这篇博客文章“Hibernate使用xdoclet生成映射文件和sql语句”可能详细介绍了...

    自动生成SQL语句,及格式

    "自动生成SQL语句"是一个非常实用的技术,尤其对于开发者来说,它可以极大地提高工作效率,减少手动编写SQL时可能出现的错误。下面将详细介绍这个主题,并围绕"自动生成SQL语句"这一功能展开讨论。 首先,自动生成...

    自动生成sql语句.rar

    为了解决这个问题,一种高效的方法是利用工具或框架自动生成SQL语句,特别是在基于Java的开发环境中,这可以通过映射实体类来实现。标题“自动生成sql语句.rar”和描述所提及的,就是这样一个提高开发效率的解决方案...

    快速生生成sql语句,反编译.class文件,java代码生成……

    首先,让我们关注“快速生成SQL语句”。在数据库驱动的应用程序开发中,编写SQL语句是必不可少的。手动编写不仅耗时,还容易出错。为了解决这个问题,有许多工具可以自动生成SQL,例如MyBatis或Hibernate。MyBatis是...

    hibernate实现动态SQL查询

    本篇文章主要探讨如何利用Hibernate实现动态SQL查询,结合XML配置和FREEMARKER模板引擎来生成执行的SQL语句。 一、Hibernate简介 Hibernate作为一款强大的持久层框架,它简化了Java应用程序与数据库之间的交互。...

    Java开发的sql生成器

    1. **元数据解析**:它能读取数据库的元数据,如表结构、字段类型等,为生成SQL语句提供基础信息。 2. **语法规则引擎**:根据预定义的模板或者用户配置,结合元数据信息,生成符合SQL语法的语句。 3. **动态条件...

    仿hibernate动态生成sql保存对象

    现在,如果你想要仿照Hibernate实现动态生成SQL来保存对象,你需要以下步骤: 1. **反射机制**:利用Java的反射API解析对象的属性,获取字段名和值,这是构建SQL语句的基础。例如,`Field[] fields = obj.getClass...

    hibernate数据库通用SQL代码

    对于更复杂的SQL操作,可能需要使用原生的SQL语句。这个方法接收一个SQL字符串,通过Session获取数据库连接,创建PreparedStatement,执行查询,处理结果集,将其转换为ArrayList并返回。注意,这种方法需要手动处理...

    model自动生成对应crud sql语句

    2. 自动化生成SQL:一些ORM(对象关系映射)库,如Hibernate(Java)、SQLAlchemy(Python)、Entity Framework(C#)等,可以基于模型类自动构建SQL语句。它们会根据模型的属性生成INSERT、SELECT、UPDATE、DELETE...

    Hibernate在Myeclipse下SQL语句演示

    **Hibernate在Myeclipse下SQL语句演示** Hibernate是一个强大的对象关系映射(ORM)框架,它简化了Java应用程序与数据库之间的交互。在Myeclipse这样的集成开发环境中,使用Hibernate可以方便地进行SQL语句的编写和...

    hibernate 执行原生sql的几种方式

    Hibernate的`Session`接口提供了`createSQLQuery()`方法,允许我们直接编写SQL语句。例如: ```java Session session = sessionFactory.openSession(); SQLQuery query = session.createSQLQuery("SELECT * FROM...

    使用hibernate对sqlserver 2005进行增删改查

    在Java开发中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它允许开发者通过面向对象的方式来操作数据库,而无需直接编写SQL语句。在这个场景中,我们将探讨如何使用Hibernate与SQL Server 2005数据库进行...

    Java 使用注解拼接SQL语句

    "Java使用注解拼接SQL语句"是一个常见的实践,它使得动态构建SQL查询变得更为简洁和可维护。这种技术通常与ORM(对象关系映射)框架如MyBatis或Hibernate结合使用,但也可以通过自定义处理逻辑实现。 1. **自定义...

Global site tag (gtag.js) - Google Analytics