Hibernate入门(三)Hibernate配置文件详解

版权声明:程序猴jwang版权所有 https://blog.csdn.net/qq_21046965/article/details/86583771

前言

     本章讲解Hibernate的配置文件

方法

1.概念

在前面的学习中,我们提到了两个在Hibernate中非常重要的配置文件,即hibernate.cfg.xml和XXX.hbm.xml

那么,本章将围绕这两个配置文件进行讲解!

2.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="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
        <property name="connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>
        <property name="connection.username">scott</property>
        <property name="connection.password">tiger</property>

        <!-- 数据库方言,指定使用的数据库 -->
        <property name="dialect">org.hibernate.dialect.Oracle10gDialect</property>

        <!-- 显示SQL -->
        <property name="show_sql">true</property>

        <!-- 配置映射文件路径 -->
        <mapping resource="cn/edu/ccut/User.hbm.xml"/>

    </session-factory>

</hibernate-configuration>

这里列举的不是太全面,下面将进行一一讲解:

1)数据库连接配置:

在这里,有必须要配置的几个参数,那就是我们之前学习JDBC以及MyBatis所必须的四个配置,这里就不多说了:

<!-- 数据库连接配置 -->
<property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>
<property name="connection.username">scott</property>
<property name="connection.password">tiger</property>

还有一些其他的附加配置,如果使用c3p0等连接池的时候:

<property name="connection.pool_size">100</property>//连接池大小
<property name="connection.provider_class">org.hibernate.c3p0.internal.C3P0ConnectionProvider</property>//c3p0连接池
<property name="c3p0.acquire_increment">5</property>//
<propertyname="c3p0.idle_test_period">60</property>//设定的时间间隔去自动校验链接对象并销毁timeout的        
<property name="c3p0.max_size">100</property>//最大连接数
<property name="c3p0.min_size">15</property>//最小连接数
<property name="c3p0.max_statements">100</property>//JDBC的标准参数,用以控制数据源内加载的PreparedStatements数量。但由于预缓存的statements属于单个 connection而不是整个连接池。所以设置这个参数需要考虑到多方面的因素。如果maxStatements与 maxStatementsPerConnection均为0,则缓存被关闭
<property name="c3p0.timeout">1000</property>//连接超时时间

2)通用配置

扫描二维码关注公众号,回复: 5120635 查看本文章

通用配置包含数据库方言,SQL显示与版式,表的生成策略以及是否自动提交事务等等

<!-- show_sql: 操作数据库时,会 向控制台打印sql语句 -->
<property name="show_sql">true</property>
<!-- format_sql: 打印sql语句前,会将sql语句先格式化  -->
<property name="format_sql">true</property>
<!--  update(最常用的取值): 如果当前数据库中不存在表结构,那么自动创建表结构. 
		 如果存在表结构,并且表结构与实体一致,那么不做修改
		 如果存在表结构,并且表结构与实体不一致,那么会修改表结构.会保留原有列.
	 create(很少):无论是否存在表结构.每次启动Hibernate都会重新创建表结构.(数据会丢失)
	 create-drop(极少): 无论是否存在表结构.每次启动Hibernate都会重新创建表结构.每次Hibernate运行结束时,删除表结构.
	 validate(很少):不会自动创建表结构.也不会自动维护表结构.Hibernate只校验表结构. 如果表结构不一致将会抛出异常.
-->
<property name="hbm2ddl.auto">update</property>
<!-- 数据库方言配置 -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- hibernate.connection.autocommit: 事务自动提交  -->
<property name="hibernate.connection.autocommit">true</property>
<!-- 将Session与线程绑定=> 只有配置了该配置,才能使用getCurrentSession -->
<property name="hibernate.current_session_context_class">thread</property>

3)映射文件配置

我们知道,每个实体类我们都配置了与之对应的XXX.hbm.xml

那么要想让Hibernate知道这些文件,必须配置加载:

<!-- 配置映射文件路径 -->
<mapping resource="cn/edu/ccut/User.hbm.xml"/>

特别的:可以有多个类似的映射文件路径配置

3.XXX.hbm.xml

该配置文件用来指示实体类与表之间的映射关系,一般情况下的命名方式是实体类名称.hbm.xml

如我的实体类是User.java,那么我的映射配置文件就是User.hbm.xml

先来看一下我们之前配置的User.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!-- 配置hibernate实体类与表的映射关系 package表示映射类所在的包名 -->
<hibernate-mapping package="cn.edu.ccut.bo">
    <!-- 配置实体类和表的关系,包含实体类名称和表名称、实体类属性和表字段等等映射关系 -->
    <class name="User" table="Users">
        <!-- 主键及其生成策略 -->
        <id name="username">
            <generator class="native"></generator>
        </id>
        <!-- 其他属性配置 -->
        <property name="password"></property>
    </class>
</hibernate-mapping>

当然,这也只是最为简单的配置,我们只需要了解一些简单的配置即可,因为后期我们将使用注解进行配置!

一些基础的配置我相信大家看应该是可以看得懂的,这里主要讲解一下难点!

1)主键生成策略

主键生成策略有一大堆,这里我并不打算全部的说明!

这里主要讲解实际项目中常用的生成策略:

1.sequence

如果你的数据库如Oracle支持序列的话,那么你的主键可以选择此种生成方式,具体配置如下:

<!-- 主键及其生成策略 -->
<id name="username">
    <generator class="sequence">
        <!-- 配置所需要的序列名称,序列由数据库本身进行维护 -->
        <param name="sequence">hibernate_id</param>
    </generator>
</id>

2.identity

如果你的数据库如MySQL支持主键自增长的话,那么你的主键可以选择此种生成方式,具体配置如下:

<!-- 主键及其生成策略 -->
<id name="username">
    <generator class="identity" />
</id>

3.native

该配置表示由hibernate根据使用的数据库自行判断采用identity、hilo、sequence其中一种作为主键生成方式

<!-- 主键及其生成策略 -->
<id name="username">
    <generator class="native"></generator>
</id>

4.uuid(公司开发中基本使用该主键生成策略)

该生成策略表示主键在保存对象的时候自动生成不会重复的32位机器码,使用十分方便!

具体配置如下:

<!-- 主键及其生成策略 -->
<id name="username">
    <generator class="uuid"></generator>
</id>

猜你喜欢

转载自blog.csdn.net/qq_21046965/article/details/86583771