Hibernate笔记 2:配置文件详解
跳到导航
跳到搜索
关于
配置文件是 Hibernate 中相当重要的部分,对于 Hibernate、数据库、orm 等内容的都依赖于配置文件。 1、配置文件可以是: .xml文件、.properties文件(属性文件); 2、配置文件中均需要引入 dtd 约束; - (xml 的约束格式包括:dtd、schema,而 Hibernate 的配置文件中均使用 dtd)
“映射关系”配置文件
“映射关系”,即:实体类和数据库表一一对应的关系。 关于“映射关系配置文件”: 1、文件名称 和 位置 没有固定要求; - 建议:在实体类所在包里面创建,名称为“<实体类名称>.hbm.xml”;
格式
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <!-- class 标签:建立“类”和“表”的映射 * name 属性 :类中的全路径 * table 属性 :表名(如果类名和表名一致,则该属性可以省略) * catalog 属性:数据库名称,可以省略 --> <class name="XXX.XXX.XXX" table="ZZZ"> <!-- id 标签:建立“类中的唯一性属性”与“表中的主键”的映射 * name 属性 :类中的属性名 * column 属性:表中的字段名(如果“类的属性名”和“表中的字段名”一致,则可省略) * length 属性:字段的长度 * type 属性:类型。写Java数据类型,Hibernate数据类型(默认),SQL类型 --> <id name="xxx" column="zzz"> <!-- 主键生成策略 --> <generator class="???"/> </id> <!-- id 标签: 建立“类中的普通属性”与“表中的字段”的映射 * name 属性 :类中的属性名 * column 属性:表中的字段名(如果“类的属性名”和“表中的字段名”一致,则可省略) * length 属性:字段的长度 * type 属性:类型。写Java数据类型,Hibernate数据类型(默认),SQL类型 --> <property name="xxx" column="zzz" type="???"/> <property name="xxx" column="zzz" type="???"/> <property name="xxx" column="zzz"/> <property name="xxx" column="zzz"/> </class> </hibernate-mapping>
<class>
用于配置“实体类”与“表”的对应;- “name”属性值为“实体类的全路径”;
<id>
用于配置“(具有唯一性的)实体类的属性”与“(具有唯一性的)表的字段”的对应;- “column”属性可以省略(与“name”一致);
<generator>
用于配置主键的“增长方式”;- uuid;
- native(自增);
<property>
用于配置“实体类的属性”与“表的字段”的对应;- “column”属性可以省略(与“name”一致);
- “type”属性用于设置生成表字段的类型(自动对应类型);
示例
- “Customer.hbm.xml”:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="cn.itcast.domain.Customer" table="customer"> <id name="cust_id" column="id"> <generator class="native"/> </id> <property name="cust_name" column="name"/> <property name="cust_source" column="source"/> <property name="cust_industry" column="industry"/> <property name= "cust_level" column= "level"/> <property name="cust_phone" column="phone"/> <property name="cust_mobile" column="mobile"/> </class> </hibernate-mapping>
核心配置文件
Hibernate 核心配置文件,其名称与位置均是固定的。 关于“Hibernate 核心配置文件”: 1、文件名称和位置固定: - 位置:必须位于 src 下。 - 名称:必须为“hibernate.cfg.xml”(或“hibernate.properties”)。 2、hibernate 操作过程中,只会加载核心配置文件,其他配置文件不会加载。 - “映射关系配置文件”需要配置到“核心配置文件”中,才会被加载。
格式
<?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> <!-- 第一部分 数据库信息 --> ... <!-- 第二部分 hibernate信息 --> ... <!-- 第三部分 映射文件 --> <mapping resource="..."/> <session-factory> </hibernate-configuration>
- 配置数据库信息:
- 使用不同的数据库驱动(不同版本驱动)时,配置信息可能有差别。【可以从类似“mysql-connector”的包里去找相应内容】
- 示例:
- 使用“mysql-connector-java-5.0.4-bin.jar”时:
<property name="hibernate.connection.driver.class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.url">jdbc:mysql:///hibernate_day01</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">admin</property>
- 使用“mysql-connector-java-8.0.11.jar”时:
<property name="hibernate.connection.driver_class">com.mysql.cj.jdbc.Driver</property> <property name="hibernate.connection.url">jdbc:mysql:///hibernate_day02?useSSL=false&serverTimezone=UTC</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">admin</property>
- 配置 Hibernate 信息:
<!-- 控制台输出 sql 语句 --> <property name="hibernate.show_sql">true</property> <!-- 格式化输出的 sql 语句 --> <property name="hibernate.format_sql">true</property> <!-- hibernate 的 DDL 规则(update:无则创建,有则更新) --> <property name="hibernate.hbm2ddl.auto">update</property> <!-- 配置数据库方言(让 hibernate 框架识别不同数据库特有的方言) --> <property name="hibernate.dialect">org.hibernate.dialect.MySqlDialect</property>
- 配置“映射关系配置文件”:
- 需要定位到(需要加载的)“映射关系配置文件”所在包的位置。
- 示例:
<mapping resource = "cn/itcast/entity/User.hbm.xml"/>
常用配置属性
名称 用途 hibernate.dialect 操作数据库方言 hibernate.connection.driver_class 连接数据库驱动程序 hibernate.connection.url 连接数据库 URL hibernate.connection.username 数据库用户名 hibernate.connection.password 数据库密码 hibernate.show_sql 在控制台上输出 SQL 语句 hibernate.format_sql 格式化控制台输出的 SQL 语句 hibernate.hbm2ddl.auto 当 SessionFactory 创建时是否根据映射文件自动验证表结构或自动创建、自动更新数据库表结构。 - 该参数的取值为: none、 validate、 update、 create 和 create-drop。
hibernate.connection.autocommit 事务是否自动提交
- hibernate.hbm2ddl.auto 的取值:(DDL,即“数据库定义语言”,如:create drop alter 等)
- none:不用 Hibernate 自动生成表;
- create:每次都会创建新的表;【用于测试】
- create-drop:每次都会创建新的表,执行程序结束后删除表;【用于测试】
- update:如果数据库中有表则直接使用,否则创建新表,且可以更新表结构;
- validate:只会使用原有的表,对映射关系进行校验;