java - 我在 spring/hibernate 中使用什么 mysql 驱动程序?

标签 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 

最佳答案

Little confused, is 'driverclassname' and 'hibernate.dialect' both referring to the mysql driver?

不,他们不是。 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

The name of the class that implements java.sql.Driver in MySQL Connector/J is 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

(...) The classname of a Hibernate org.hibernate.dialect.Dialect which allows Hibernate to generate SQL optimized for a particular relational database.

e.g. full.classname.of.Dialect

In most cases Hibernate will actually be able to choose the correct org.hibernate.dialect.Dialect implementation based on the JDBC metadata returned by the JDBC driver.

对于 MySQL 5.x,如果您使用 InnoDB 表(这是我的建议)或 org.hibernate.dialect.MySQL5Dialect,您应该使用 org.hibernate.dialect.MySQL5InnoDBDialect 如果你不是。请参阅 3.4.1. SQL Dialects 部分一份(非详尽的) list 。

最后一点,您甚至没有在问题中提及的 Maven 部分...Maven 中央存储库中提供了 MySQL JDBC 驱动程序,您应该使用 repository search engine (如 I 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:我并不是故意粗鲁,我很乐意提供帮助,但您真的应该尝试利用您正在使用的产品或框架的文档。您在这个问题中提出的问题有据可查(如我所展示的),并且很容易找到。在我看来,学会自己查找基本信息是软件开发人员的一项基本技能。

关于java - 我在 spring/hibernate 中使用什么 mysql 驱动程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3278148/

相关文章:

java - 从 txt 文件中删除前 18 个字符的批处理文件

java - 有偏随机数生成器 - Java

java - 有没有办法在没有 DTO 的情况下将 Hibernate 实体公开为 RESTful 资源?

mysql - 需要在 Mac El Capitan 上安装旧版本的 MySQL

javascript - 如何使用 PHP、javascript mysql 事务将输入的数组值插入到数据库中

java - 求和投影和结果约束

java - 如何对 Spring @Bean CommandLineRunner 进行单元测试?

带有子选择的 MySQL 更新

java - 添加子关系时如何使 Hibernate 不增加父实体的版本列(@ManyToMany 集合)

java - NonUniqueObjectException 和 IdentifierGenerationException - 无法更新表