关于Hibernate解析HQL的一些疑问

最近对Hibernate理论比较感兴趣,小研究了Hibernate的部分源码,对其中的流程进行了简单的总结并存在些疑问,希望高手给于帮助或者推荐些相应的学习资料,谢谢!

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>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值