数据库学习--Hibernate方言(是什么 为什么 怎么办)

原文地址:数据库学习–Hibernate方言(是什么 为什么 怎么办)

知识储备

HQL和SQL。

是什么

HQL : Hibernate Query Language,Hibernate查询语言 。
SQL : Structured Query Language,结构化查询语言。

面向对象

HQL : 面向对象查询(根本区别) 。
SQL : 面向数据库表查询。

使用方法

HQL :

from 后面跟的类名 + 类对象 where + 符合条件的对象的属性; 

例如:

from User user where user age=20;

SQL :

扫描二维码关注公众号,回复: 5088706 查看本文章
from 后面跟的表名 + where + 符合条件的字段; 

例如:

SELECT * FROM testtable WHERE age > 20;

将HQL转换成SQL
为什么

通常我们在做项目时,都是”某某框架+hibernate/JPA/JDBC+某某数据库”的形式,如果业务要求我们,要使项目能够适配多种数据库,也就是变成了”某某框架+hibernate/JPA/JDBC+某1数据库,某2数据库,某3数据库”。(比如:SpringMVC+ Hibernate + MySQL,Oracle)那么,现在就需要我们把HQL语句转换成不同的SQL语句了。那么,方言就来了。

Hibernate方言
为什么

在Hibernate底层依然使用SQL语句来执行数据库操作,虽然所有关系型数据库都支持使用标准SQL语句,但所有数据库都对标准SQL进行了一些扩展,所以在语法细节上存在一些差异,因此Hibernate需要根据数据库来识别这些差异。假如系统需要数据库的变换时,那么用hibernate的话就只需要改一改配置文件(修改连接字符串、驱动类、方言等),而用传统的jdbc时,那么sql语言可能就要有很多改动。(略微重复了)

是什么

为实现HQL语句向不同数据库的SQL语句转换时,解决不同数据库之间的差异而制定的一套”规范”。
举例来说,我们在MySQL数据库里进行分页查询,只需使用limit关键字就可以了;而标准SQL并不支持limit关键字,例如Oracle则需要使用行内视图的方式来进行分页。同样的应用程序,当我们在不同数据库之间迁移时,底层数据库的访问细节会发生改变,而Hibernate也为这种改变做好了准备,现在我们需要做的是:告诉Hibernate应用程序的底层即将使用哪种数据库——这就是Hibernate方言。

怎么办

简单,为hibernate设置合适的数据库方言,Hibernate将可以自动应付底层数据库访问所存在的细节差异。

猜你喜欢

转载自blog.csdn.net/qq_37960603/article/details/86660308