我使用spring / hibernate的mysql驱动程序是什么?

时间:2010-07-19 02:38:51

标签: java mysql hibernate spring

有点困惑,是'driverclassname'和'hibernate.dialect'都指的是mysql驱动程序?

我应该使用什么? connectorJ是我应该使用的吗?

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="org.hsqldb.jdbcDriver"/>
        <property name="url" value="jdbc:mysql://localhost/blah"/>



<property name="hibernateProperties">
            <value>
                hibernate.dialect=org.hibernate.dialect.MySQLDialect

我正在使用Maven,所以如果我能从maven那里获得理想的驱动程序。

在tomcat中运行我的应用程序我收到错误:

Cannot create JDBC driver of class 'org.hsqldb.jdbcDriver' for connect URL 

3 个答案:

答案 0 :(得分:21)

  

有点困惑,是'driverclassname'和'hibernate.dialect'都指的是mysql驱动程序?

不,他们不是。 driverclassname指的是驱动程序类名称,它是来自实现java.sql.Driver的给定JDBC驱动程序的类。驱动程序类名称是特定于驱动程序的。

当使用MySQL的JDBC驱动程序(即MySQL Connector / J)时,此类为com.mysql.jdbc.Driver,如MySQL Connector / J文档中所述:

  

20.3.4.1. Driver/Datasource Class Names, URL Syntax and Configuration Properties for Connector/J

     

实现的类的名称   MySQL Connector / J中的java.sql.Driver   是com.mysql.jdbc.Driver。 (...)

实际上,他们甚至提供了使用Spring驱动程序的说明。请参阅20.3.5.2.4. Using Connector/J with Spring部分。

hibernate.dialect不同,此配置属性用于定义 Hibernate org.hibernate.dialect.Dialect的类名,它允许Hibernate生成针对特定关系数据库优化的SQL 。 Hibernate文档中也解释了这一点:

  

3.4. Optional configuration properties

     

(...)Hibernate的类名   org.hibernate.dialect.Dialect哪个   允许Hibernate生成SQL   针对特定关系进行了优化   数据库中。

     

例如 full.classname.of.Dialect

     

在大多数情况下,Hibernate实际上会   能够选择正确的   org.hibernate.dialect.Dialect   基于JDBC的实现   JDBC驱动程序返回的元数据。

对于MySQL 5.x,如果您使用的是InnoDB表(这是我的建议),则应使用org.hibernate.dialect.MySQL5InnoDBDialect;如果不是,则应使用org.hibernate.dialect.MySQL5Dialect。有关(非详尽的)列表,请参阅3.4.1. SQL Dialects部分。

最后一点,您在问题中甚至没有提到的Maven部分...... Maven中央存储库中提供了MySQL JDBC驱动程序,您应该使用repository search engineI already suggested )。例如,以下查询:

http://www.jarvana.com/jarvana/search?search_type=project&project=mysql

允许通过两次点击找到最终版本的maven坐标:

<dependency>
   <groupId>mysql</groupId>
   <artifactId>mysql-connector-java</artifactId>
   <version>5.1.13</version>
</dependency>
PS:我不是故意粗鲁,我很乐意提供帮助,但您应该尝试利用您正在使用的产品或框架的文档。您在这个问题中提出的问题已经有详细记录(如我所示)并且可以轻松找到。在我看来,学习自己寻找基本信息是软件开发人员的基本技能。

答案 1 :(得分:1)

关于maven mysql定义,这里似乎有效。

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.12</version>
</dependency>

答案 2 :(得分:0)

driverClassName应该引用您要加载的JDBC驱动程序的类名(正如您通常在“普通”JDBC中使用Class#forName()那样)。您当前指定的那个对于MySQL JDBC驱动程序是正确的(更新:您很快将其编辑为HSQLDB JDBC驱动程序,这仅适用于Hypersonic数据库,而不适用于MySQL数据库)

hibernate.dialect应该是指您想要用于特定数据库的Hibernate Dialect实现的类名,以便Hibernate知道所讨论的数据库是什么,以便它可以自动生成合适的SQL语句。您当前指定的那个对于MySQL数据库是正确的。


那就是说,听起来你遇到了问题。可能你还没有安装MySQL JDBC驱动程序?你收到ClassNotFoundException吗?只需下载Connector/J,解压缩并将JAR文件放在运行时类路径中就足够了。