【Hibernate笔记整理二】配置文件

版权声明:本文为 小异常 原创文章,非商用自由转载-保持署名-注明出处,谢谢!
本文网址:https://blog.csdn.net/sun8112133/article/details/106151264







通过上篇 HelloWorld 博客我们已经大致了解了 Hibernate 这款全自动化框架的执行流程。

本篇博客主要介绍 Hibernate 中的两类配置文件:核心配置文件映射文件(这两类配置文件的文件名一般要遵循相应的规范)。


一、核心配置文件

Hibernate 核心配置文件 的模板在 project\etc 目录中。

02核心配置文件

1、Hibernate 的核心配置方式

1)方式一:属性配置文件(hibernate.properties,不推荐使用)

hibernate.connection.driver_class=com.mysql.jdbc.Driver
...
hibernate.show_sql=true

注意: 属性配置文件的文件名是:hibernate.properties。这种方式一般不使用,因为它不能引入映射文件,还得手动编写代码来加载映射文件,过程过于繁琐。


2)方式二:XML配置文件(hibernate.cfg.xml,推荐使用)

XML 配置文件的文件名是: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:///sys</property>
		<property name="hibernate.connection.username">root</property>
		<property name="hibernate.connection.password">123456</property>
		<!-- 配置Hibernate的方言 -->
		<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
		
		<!-- 可选配置================ -->
		<!-- 打印SQL -->
		<property name="hibernate.show_sql">true</property>
		<!-- 格式化SQL -->
		<property name="hibernate.format_sql">true</property>
		<!-- 自动创建表 -->
		<property name="hibernate.hbm2ddl.auto">update</property>
		
		<!-- 配置C3P0连接池 -->
		<property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
		<!--在连接池中可用的数据库连接的最少数目 -->
		<property name="c3p0.min_size">5</property>
		<!--在连接池中所有数据库连接的最大数目  -->
		<property name="c3p0.max_size">20</property>
		<!--设定数据库连接的过期时间,以秒为单位,
		如果连接池中的某个数据库连接处于空闲状态的时间超过了timeout时间,就会从连接池中清除 -->
		<property name="c3p0.timeout">120</property>
		 <!--每3000秒检查所有连接池中的空闲连接 以秒为单位-->
		<property name="c3p0.idle_test_period">3000</property>
		
		<!-- 设置事务隔离级别 -->
		<property name="hibernate.connection.isolation">4</property>
		<!-- 配置当前线程绑定的 Session -->
		<property name="hibernate.current_session_context_class">thread</property>
		
		<!-- 引入映射 -->
		<mapping resource="com/domain/Customer.hbm.xml"/>
		<mapping resource="com/domain/LinkMan.hbm.xml"/>
	</session-factory>
</hibernate-configuration>

2、核心配置

1)必要配置

A. 连接数据库的基本参数

  • 驱动类hibernate.connection.driver_class
  • URLhibernate.connection.url
  • 用户名hibernate.connection.username
  • 密码hibernate.connection.password
<!-- 连接数据库的基本参数 -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql:///sys</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">123456</property>

B. Hibernate 方言(hibernate.dialect

Hibernate 方言 简单的说就是设置使用的数据库语言,这样 Hibernate 在底层就能转换成对应数据库的 SQL 语言。

<!-- 配置 Hibernate 的 MySQL 方言 -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

2)可选配置

A. 显示 SQL(hibernate.show_sql

是否在控制台上显示相应的 SQL 语句。

B. 格式化 SQL(hibernate.format_sql

是否美化控制台上的 SQL 语句。

C. 自动建表(hibernate.hbm2ddl.auto

通过此配置可以使用 Hibernate 来创建或更新数据表。其中 hbm2ddl 是指可以根据映射文件转为 DDL 语言(数据库模式定义语言 ),它里面的 2 代表 to。它有以下五个值:

  • none :默认值,不使用 Hibernate 的自动建表功能;
  • create :如果数据库中已经有表,则删除原有表,然后再重新创建;如果数据库中没有表,则新建表。此值一般测试的时候会使用;
  • create-drop :如果数据库中已经有表,则删除原有表,然后执行后面的语句,再删除这个表;如果数据库中没有表,则新建一个表,使用完了再删除该表。此值一般测试的时候会使用,使用此值时必须把 SessionFactory 关闭,若不关闭则会报错;
  • update :如果数据库中有表,就使用原有表;如果数据库中没有表,则创建新表;
  • validate :如果数据库中没有表,就不会创建表,它只会使用数据库中原有的表,但是它使用的时候会校验映射和表结构。

D. 配置连接池

<!-- 配置C3P0连接池 -->
<property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
<!--在连接池中可用的数据库连接的最少数目 -->
<property name="c3p0.min_size">5</property>
<!--在连接池中所有数据库连接的最大数目  -->
<property name="c3p0.max_size">20</property>
<!--设定数据库连接的过期时间,以秒为单位,
  如果连接池中的某个数据库连接处于空闲状态的时间超过了timeout时间,就会从连接池中清除 -->
<property name="c3p0.timeout">120</property>
<!--每3000秒检查所有连接池中的空闲连接 以秒为单位-->
<property name="c3p0.idle_test_period">3000</property>

E. 事务隔离级别(hibernate.connection.isolation

事务的隔离级别有四个,它们在程序中用四个数字进行表示,它们分别是:

  • 读未提交:Read uncommitted isolation,它用 1 表示;
  • 读已提交:Read committed isolation,它用 2 表示;
  • 可重复读:Repeatable read isolation,它用 4 表示;
  • 序列化:Serializable isolation,它用 8 表示。
<!-- 设置事务隔离级别 为 可重复读 -->
<property name="hibernate.connection.isolation">4</property>

F. 当前线程绑定的 Session(hibernate.current_session_context_class

Hibernate 中可以指定 Session 管理方式,它的可选值有:

  • thread:Session 对象的生命周期与本地线程绑定;
  • jta:Session 对象的生命周期与 JTA 事务绑定;
  • managed:Hibernate 委托程序来管理 Session 对象的生命周期。
<!-- 配置当前线程绑定的 Session -->
<property name="hibernate.current_session_context_class">thread</property>

3)引入映射文件

在配置文件中引入映射文件只能通过 XML 配置文件 的方式,如:

<mapping resource="com/demo/domain/Customer.hbm.xml" />


二、映射文件

映射文件 是将 Java 中的实体类与数据库中的表建立映射关系的配置文件,它的文件名格式是:类名.hbm.xml。它有几个常用标签:

1、class 标签

class 标签是用来建立类与表的映射关系。它的常用属性有:

  • name :类的全类名,如:name="com.demo.Student"
  • table :表名。如果类名和表名一致,table 属性可以省略,如:table="s_student"
  • catelog :数据库名。这个属性可以不用写,因为在核心配置文件中已经配置过了,如果一个项目中用到了多个数据库,该属性才发挥作用,如:catelog="sys"

2、id 标签

id 标签是用来建立类中的 id 属性与表中主键字段的对应关系。它的常用属性有:

  • name :类中的属性名;

  • column :表中的字段名。如果类中的属性名和表中的字段名一致,column 属性可以省略;

  • length :字段长度。我们一般通过 Hibernate 建表时需要用到此属性;

  • type :类型。这个属性不需要自己去写,Hibernate 可以自动进行转换。此类型有三种写法:

    • Java 类型:type="java.lang.String"

    • Hibernate 类型:type="string"

    • 数据库类型:

      <property name="cust_name" length="32">
      	<column name="cust_name" sql-type="varchar"></column>
      </property>
      

3、property 标签

property 标签是用来建立类中的普通属性与表字段的对应关系。id 标签 与 property 标签十分类似,相同的属性我就不进行过多介绍了。它的常用属性有:

  • name :类中的属性名;
  • column :表中的字段名。如果类中的属性名和表中的字段名一致,column 属性可以省略;
  • length :字段长度。我们一般通过 Hibernate 建表时需要用到此属性;
  • type :这个属性不需要自己去写,Hibernate 可以自动进行转换;
  • not-null :是否允许为空(数据表里是非空约束)。not-null='true'
  • unique :是否唯一(数据表里是唯一约束)。unique="true"

4、实例代码

<!-- 建立类与表的映射 -->
<class name="com.hibernate.demo1.Customer" table="cst_customer">
	<!-- 建立类中的属性与表中的主键对应 -->
	<id name="cust_id" column="cust_id">
		<!-- 主键都有生成策略 native: 本地策略 -->
		<generator class="native" />
	</id>
	<!-- 建立类中的普通属性和表字段的对应 -->
	<property name="cust_name" column="cust_name" />
	<property name="cust_source" column="cust_source" />
	<property name="cust_industry" column="cust_industry" />
	<property name="cust_level" column="cust_level" />
	<property name="cust_phone" column="cust_phone" />
	<property name="cust_mobile" column="cust_mobile" />
</class>


博客中若有不恰当的地方,请您一定要告诉我。前路崎岖,望我们可以互相帮助,并肩前行!



猜你喜欢

转载自blog.csdn.net/sun8112133/article/details/106151264