简介
Hibernate 需要事先知道在哪里找到映射信息,这些映射信息定义了 Java 类怎样关联到数据库表。Hibernate 也需要一套相关数据库和其它相关参数的配置设置。所有这些信息通常是作为一个标准的 Java 属性文件提供的,名叫 hibernate.properties。又或者是作为 XML 文件提供的,名叫 hibernate.cfg.xml。
我们将考虑 hibernate.cfg.xml 这个 XML 格式文件,来决定在我的例子里指定需要的 Hibernate 应用属性。这个 XML 文件中大多数的属性是不需要修改的。这个文件保存在应用程序的类路径的根目录(src)里。
Hibernate 属性
下面是一个重要的属性列表,你可能需要表中的属性来在单独的情况下配置数据库。
- hibernate.dialect
这个属性使 Hibernate 应用为被选择的数据库生成适当的 SQL。
- hibernate.connection.driver_class
JDBC 驱动程序类。
- hibernate.connection.url
数据库实例的 JDBC URL。
- hibernate.connection.username
数据库用户名。
- hibernate.connection.password
数据库密码。
- hibernate.connection.pool_size
限制在 Hibernate 应用数据库连接池中连接的数量。
- hibernate.connection.autocommit
允许在 JDBC 连接中使用自动提交模式。
如果您正在使用 JNDI 和数据库应用程序服务器然后您必须配置以下属性:
- hibernate.connection.datasource
在应用程序服务器环境中您正在使用的应用程序 JNDI 名。
- hibernate.jndi.class
JNDI 的 InitialContext 类。
- hibernate.jndi.<JNDIpropertyname>
在 JNDI的 InitialContext 类中通过任何你想要的 Java 命名和目录接口属性。
- hibernate.jndi.url
为 JNDI 提供 URL。
- hibernate.connection.username
数据库用户名。
- hibernate.connection.password
数据库密码。
方言属性
数据库 | 方言属性 |
---|---|
DB2 | org.hibernate.dialect.DB2Dialect |
HSQLDB | org.hibernate.dialect.HSQLDialect |
HypersonicSQL | org.hibernate.dialect.HSQLDialect |
Informix | org.hibernate.dialect.InformixDialect |
Ingres | org.hibernate.dialect.IngresDialect |
Interbase | org.hibernate.dialect.InterbaseDialect |
Microsoft SQL Server 2000 | org.hibernate.dialect.SQLServerDialect |
Microsoft SQL Server 2005 | org.hibernate.dialect.SQLServer2005Dialect |
Microsoft SQL Server 2008 | org.hibernate.dialect.SQLServer2008Dialect |
MySQL | org.hibernate.dialect.MySQLDialect |
MySQL新版本中org.hibernate.dialect.MySQLDialect已不适用,在创建表时,会报错 | org.hibernate.dialect.MySQL5InnoDBDialect |
Oracle (any version) | org.hibernate.dialect.OracleDialect |
Oracle 11g | org.hibernate.dialect.Oracle10gDialect |
Oracle 10g | org.hibernate.dialect.Oracle10gDialect |
Oracle 9i | org.hibernate.dialect.Oracle9iDialect |
PostgreSQL | org.hibernate.dialect.PostgreSQLDialect |
Progress | org.hibernate.dialect.ProgressDialect |
SAP DB | org.hibernate.dialect.SAPDBDialect |
Sybase | org.hibernate.dialect.SybaseDialect |
Sybase Anywhere | org.hibernate.dialect.SybaseAnywhereDialec |
配置文件示例
<!-- ~ Hibernate, Relational Persistence for Idiomatic Java ~ ~ License: GNU Lesser General Public License (LGPL), version 2.1 or later. ~ See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>. --> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!--配置mysql数据库的连接参数 --> <property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property> <!-- 驱动程序名 --> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <!-- 数据库名称 --> <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/jsp_db</property> <!-- 用户名 --> <property name="hibernate.connection.username">root</property> <!-- 密码 --> <property name="hibernate.connection.password">Lfq,909475</property> <!-- 显示SQL语句 --> <property name="show_sql">true</property> <!-- 格式化输出SQL语句 --> <property name="format_sql">true</property> <property name="hbm2ddl.auto">create</property> <mapping resource="com/hibernate/study/entity/Student.hbm.xml" /> </session-factory> </hibernate-configuration>
上述配置文件中,hbm2ddl.auto属性有四个可选值:如果不确定如何设置这个值的话,就设置为“none”
值 | 定义 |
update | 最常用的值,第一次加载hibernate时根据model类会自动建立起表的结构(前提是先建立好数据库),以后加载hibernate时根据 model类自动更新表结构,即使表结构改变了但表中的行仍然存在不会删除以前的行。要注意的是当部署到服务器后,表结构是不会被马上建立起来的,是要等 应用第一次运行起来后才会 |
validate | 每次加载hibernate时,验证创建数据库表结构,只会和数据库中的表进行比较,不会创建新表,但是会插入新值 |
create | 每次加载hibernate时都会删除上一次的生成的表,然后根据你的model类再重新来生成新表,哪怕两次没有任何改变也要这样执行 |
create-drop | 每次加载hibernate时根据model类生成表,但是sessionFactory一关闭,表就自动删除 |