关于数据库方言MySQLDialect、MySQL5Dialect、MySQL55Dialect、MySQL57Dialect、MySQL8Dialect之间的区别与联系

今天在配置Hibernate数据连接池的时候遇到一点小问题,于是就上网搜啊搜,总结了一下,干货摆放如下:

我们在用hibernate框架时,设置配置文件的时候要用到一项属性是数据库方言:

<property name="dialect">org.hibernate.dialect.MySQL57Dialect</property>

但是在MySQL57Dialect这儿有很多版本,如果配置不好就会出现各种错误,都有哪些版本呢?

我收集了一下:

①MySQLDialect

②MySQL5Dialect

③MySQL55Dialect

④MySQL57Dialect

⑤MySQL8Dialect

⑥MySQLInnoDBDialect

⑦MySQLMyISAMDBDialect

首先来看看MySQLInnoDBDialect 和 MySQLMyISAMDBDialect 的区别:

 https://blog.csdn.net/lc0817/article/details/52757194

MyISAMySQL引擎不支持外键,所有如果要映射的表里有外键的话,就会创建失败

这两个明白了,那其他的又有什么区别,再看:

一、MySQLDialect

MySQLDialect是MySQL5.X之前的版本,其默认的引擎是MyISAM。部分源码如下:

private MySQLStorageEngine storageEngine;


//org.hibernate.dialect.MySQLDialect.getDefaultMySQLStorageEngine()
protected MySQLStorageEngine getDefaultMySQLStorageEngine() {
        return MyISAMStorageEngine.INSTANCE;
}

//org.hibernate.dialect.MyISAMStorageEngine.getTableTypeString(String)
@Override
public String getTableTypeString(String engineKeyword) {
    return String.format( " %s=MyISAM", engineKeyword );
}

可以看到,确实用的是MyISAMySQL引擎;

二、MySQL5Dialect

看一下部分源码:

//org.hibernate.dialect.MySQL5Dialect
public class MySQL5Dialect extends MySQLDialect{}

可以看到,它还是用的MySQLDialect的引擎,所以它依然不支持外键;

三、MySQL55Dialect

先看一下部分源码:

//org.hibernate.dialect.MySQL55Dialect
public class MySQL55Dialect extends MySQL5Dialect {

    @Override
    protected MySQLStorageEngine getDefaultMySQLStorageEngine() {
        return InnoDBStorageEngine.INSTANCE;
    }
}

//org.hibernate.dialect.InnoDBStorageEngine
public class InnoDBStorageEngine implements MySQLStorageEngine{

    public static final MySQLStorageEngine INSTANCE = new InnoDBStorageEngine();

    @Override
    public String getTableTypeString(String engineKeyword) {
        return String.format( " %s=InnoDB", engineKeyword );
    }   
}

可以看到,虽然它是继承的MySQL5Dialect,但是它的引擎已经改为innoDB了;而且它支持事务操作,;

剩下的 MySQL57Dialect MySQL8Dialect 的还不太清楚,不敢乱发,有时间看下官方文档再解释,一般来说mysql5.x以上的用MySQL55Dialect就可以支持大多数常用操作了。

 

点个赞,举手之劳~~~

 

  • 20
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值