目录
Hibernate配置文件详解
Hibernate的相关配置文件分为两种:
Xxx.hbm.xml
:它主要是用于描述类与数据库中的表的映射关系hibernate.cfg.xml
:它是Hibernate框架的核心配置文件
-
映射配置文件(
Xxx.hbm.xml
)
实体类Customer目前还不具备持久化操作的能力,而Hibernate需要知道实体类Customer映射到数据库Hibernate哪个表,以及类中的哪个属性对应数据库表中的哪个字段,这些都需要在映射文件中配置。该文件用于向Hibernate提供持久化类到关系型数据库的映射,每个映射文件的结构基本都是相同的,映射文件通常是一个XML文件,在实体类Customer包com.mark.domain包下创建Customer.hbm.xml映射配置文件,一般命名为 类名.hbm.xml,其普遍代码形式如下
<?xml version="1.0" encoding="UTF-8"?>
<!-- 映射文件的dtd信息 -->
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!-- name代表实体类名 table代表的是表名 -->
<class name="Xxx" table="xxx">
<!-- name代表的是Xxx类中属性 column代表的是xxx表中的字段 -->
<id name="cust_id" column="cust_id">
<!-- 主键生成策略 -->
<generator class="native"></generator>
</id>
<!-- 其它属性用property标签映射 -->
<property name="XXX" column="xxx" ></property>
</class>
</hibernate-mapping>
根元素--hibernate-mapping
package属性:填写一个包名,在元素内部,凡是需要书写完整类名的属性,可以直接简写类名
class元素--类映射
class标签:用来创建类和表的映射
* name属性:类中的全路径
* table属性:表名(如果类名和表名是一致的,那么table属性可以省略)
* catalog属性:数据库名称,可以省略
id元素--主键映射
id标签:用来建立类中的属性与表中的主键字段对应
* name属性:类中的属性名
* column属性:表中字段名(如果类名和表名是一致的,那么column属性可以省略)
* length属性:字段的长度
* type属性:类型,三种写法:Java数据类型,Hibernate数据类型(默认),SQL类型
property元素--类属性映射
property标签:用来建立类中的普通属性与表中的字段对应
* name属性:类中的属性名
* column属性:表中字段名(如果类名和表名是一致的,那么column属性可以省略)
* length属性:字段的长度
* type属性:类型,三种写法:Java数据类型,Hibernate数据类型(默认),SQL类型
* not-null属性:配置该属性(列)是否能为空,默认值为false
-
核心配置文件(
hibernate.cfg.xml
)
Hibernate的映射文件反映了持久化类和数据库表之间的映射信息,而Hibernate的配置文件则主要用来配置数据库连接以及Hibernate运行时所需要的各个属性的值。在项目的src下创建一个hibernate.cfg.xml核心配置文件,其普遍代码形式如下
<?xml version="1.0" encoding="UTF-8"?>
<!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>
<!-- 必要配置信息:连接数据库的基本信息 -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql:///crm</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
<!--Hibernate的属性 -->
<!--Hibernate的方言:根据配置的方言生成相应的SQL语句 -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<!--Hibernate显示SQL语句 -->
<property name="hibernate.show_sql">true</property>
<!--Hibernate格式化SQL语句 -->
<property name="hibernate.format_sql">true</property>
<!--Hibernate的hbm2ddl(数据库定义语言:create drop alter update .....) -->
<!--
hbm2ddl.auto的取值
* none:不用Hibernate自动生成表
* create:每次都会创建一个新的表(测试)
* create-drop:每次都会创建一个新的表,执行程序结束后删除这个表(测试)
* update:如果数据库中有表,使用原来的表,如果没有表,创建一个新表,可以更新表结构
* validate:只会使用原有的表,对映射关系进行校验
-->
<property name="hibernate.hbm2ddl.auto">update</property>
<!--Hibernate加载映射 -->
<mapping resource="com/mark/domain/Customer.hbm.xml"/>
</session-factory>
</hibernate-configuration>
必选属性配置(5个)
数据库驱动 -- hibernate.connection.driver_class
连接数据库url -- hibernate.connection.url
数据库连接用户名 -- hibernate.connection.username
数据库连接密码 -- hibernate.connection.password
数据库方言 -- hibernate.dialect
可选属性配置(3个)
控制台显示SQL语句 -- hibernate.show_sql
格式化SQL语句 -- hibernate.format_sql
DDL数据库 -- hibernate.hbm2ddl.auto 取值:validate、update、create和create-drop
* validate:只会使用原有的表,对映射关系进行校验
* update:如果数据库中有表,使用原来的表,如果没有表,创建一个新表,可以更新表结构
* create:每次都会创建一个新的表(测试)
* create-drop:每次都会创建一个新的表,执行程序结束后删除这个表(测试)
映射配置文件引入
映射配置文件引入 -- map resource