首先数据库都是支持sql的,不过不同的数据库会存在一些语法上面的差异,而方言则是解决hql翻译成sql保证语法的正确。
hql则是基于对象的查询语言,hibernate会结合对象的配置文件以及方言,将写的hql翻译成sql。
至于为什么要这么做,假如系统需要数据库的变换时,那么用hibernate的话就只需要改一改配置文件(修改连接字符串、驱动类、方言等),而用传统的jdbc时,那么sql语言可能就要有很多改动,基本就是dao层重写一遍吧。
hibernate中,方言是解决hql翻译成sql保证语法的正确,首先数据库都是支持sql的,不同的数据库会存在一些语法上面的差异。
HQL则是基于对象的查询语言,当系统需要数据库的变换时,那么用hibernate的话就只需要改一改配置文件(修改连接字符串、驱动类、方言等),而用传统的jdbc时,那么sql语言可能就要有很多改动。
select petinfo from petinfo as p order by(p.petstrength+p.petcute+p.petlove)
你orderby里面写+什么意思啊?
这样试下
from petinfo as p order by p.petstrength, p.petcute, p.petlove"
hibernate相当于封住了一次jdbc,使hibernate不用考虑你是用的什么数据库,他的HQL语句都可以根据你不同数据库的方言编译成相对应的数据库sql语句,这是hibernate的一大优势,但是因为他的HQL语句都要经过编译才能成对应数据库可以执行的语句,所以用它做持久层他比ibatis稍慢。
其实每家公司的数据库产品都只有不超过80%的符合标准sql。
例如oracle的pL/sql就根本跟通常的sql相去甚远。
而且每种产品的jdbc驱动也不相同,所以需要定义方言。
用户登录
还没有账号?立即注册
用户注册
投稿取消
文章分类: |
|
还能输入300字
上传中....