锁定老帖子 主题:关于Hibernate解析HQL的一些疑问
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-06-12
Hibernate首先是使用了自己的数据库操作语言-HQL Hibernate解析HQL的编译分析器用的是ANTLR分析器 HQL虽然是一种数据库操作语言,它只是方便编写和使用,本质上还是要转换成SQL语言来在数据库上执行的。 Hibernate在转换时主要用到了ANTLR,ANTLR是JAVA编写的词法分析器和语法分析器,功能很强大。 ANTLR将HQL转化成SQL语句,再实际执行SQL语句。 ANTLR所对应的文件名的格式是*.g的格式,Hibernate的jar包中含有3个语法定义文件。 Hibernate包含了3个语法定义文件: 1. hql.g定义了词法分析和语法分析,将hql解释成hql的抽象语法树(AST) 。 2. hql-sql.g将hql AST转化为sql AST,将生成模块与hibernate解耦。 3. sql -gen.g 从sql AST生成sql 语言。 详细可以查看Hibernate中的createQuery()的调用过程 通过QueryPlanCache的getHQLQueryPlan()方法获得查询计划HQLQueryPlan的一个实例,而后者主要是调用了 QueryTranslator的compile方法,编译HQL语句。在QueryTranslator的继承类 QueryTranslatorImpl的doCompile观察这个过程: PHASE 1 : Parse the HQL into an AST. PHASE 2 : Analyze the HQL AST, and produce an SQL AST. PHASE 3 : Generate the SQL. 本人的一些疑问在于当HQL被ANTLR通过编译转换成SQL以后,Hibernate的具体执行流程以及于POJO的关联,它将通过哪些类和哪些方法用什么样的方式来执行SQL,总不会还是用的JDBC吧。 <p:colorscheme colors="#0066cc,#ffffff,#003b76,#ccecff,#33cccc,#66ccff,#ffffcc,#ffcc66"> </p:colorscheme> 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-06-12
底层肯定是jdbc,不然你说用什么呢?
|
|
返回顶楼 | |
发表时间:2007-06-12
那Hibernate具体调用Jdbc的源码在哪个类上呢 还有1点 HQL是面向对象的 而SQL面向表的 但Hibernate的操作都是在建立在对象之上的
|
|
返回顶楼 | |
发表时间:2007-06-12
呵呵 就是想理解下底层的东西 才去看源码的
|
|
返回顶楼 | |
发表时间:2007-06-13
如果底层还不是JDBC,这个hibernate也太神奇了.
;) |
|
返回顶楼 | |
发表时间:2007-06-13
呵呵 昨天又看了些代码 在SRC下面的connection package下看到了封装的JDBC类
有什么学习Hibernate源码的资料推荐吗 |
|
返回顶楼 | |
发表时间:2007-06-13
wlcome998 写道 呵呵 昨天又看了些代码 在SRC下面的connection package下看到了封装的JDBC类
有什么学习Hibernate源码的资料推荐吗 它的源码不就是资料吗? |
|
返回顶楼 | |
发表时间:2007-06-15
Hibernate中的session和用户session即HTTPSession应该没有什么必然的联系把
|
|
返回顶楼 | |
发表时间:2007-06-18
没有联系
|
|
返回顶楼 | |
发表时间:2007-08-13
楼主请问有没有办法 通过hql 解析出对应的表名???
|
|
返回顶楼 | |