深入学习Hibernate4_02 hibernate.cfg.xml文件和xxx.hbm.xml文件详解

hibernate.cfg.xml

Hibernate 配置文件主要用于配置数据库连接和 Hibernate 运行时所需的各种属性

每个 Hibernate 配置文件对应一个 Configuration 对象,Hibernate配置文件可以有两种格式:    hibernate.properties             hibernate.cfg.xml
但在这里,只谈:hibernate.cfg.xml文件


<hibernate-configuration>

	<session-factory>
	
		<property name="dialect">org.hibernate.dialect.MySQLDialect</property>     -----指定Hibernate的数据库方言
		<property name="connection.url">jdbc:mysql://localhost:3306/mysql</property>  ------指定链接数据库的URL
		<property name="connection.username">root</property>  -----数据库用户名
		<property name="connection.password">ddd</property>------数据库密码
		<property name="connection.driver_class">com.mysql.jdbc.Driver</property>  -----数据库驱动
		<property name="myeclipse.connection.profile">mySQLConnect</property>   ------连接数据库的名字
		
		<property name="show_sql">true</property>  ----在控制台打印生成的SQL语句
		<property name="format_sql">true</property>  ---格式化SQL,适合开发者阅读
		
               <!--  需要注意的是,需要首先导入c3p0的jar包  -->
          <property name="hibernate.c3p0.max_size">10</property>    --连接池最大的连接数
          <property name="hibernate.c3p0.min_size">5</property>   ---连接池最小的连接数
          <property name="c3p0.acquire_increment">2</property>   ---当并发访问比较大的时候,每次自动获得2个链接,数量视情况而定
          <property name="hibernate.c3p0.timeout">2000</property>  ---数据库连接池中连接对象在多长时间没有使用过后,就应该被销毁
          <property name="c3p0.idle_test_period">2000</property> ---表示连接池检测线程多长时间检测一次池内的所有链接对象是否超时.
          <property name="c3p0.max_statements">10</property>   缓存 Statement 对象的数量

		<mapping resource="entity/CourseSelectUser.hbm.xml" />   -----对象关系映射文件
	</session-factory>

</hibernate-configuration>


xxx.hbm.xml(hb--->hibernate,m--->mapping

       POJO 类和关系数据库之间的映射可以用一个XML文档来定义。
      通过 POJO 类的数据库映射文件,Hibernate可以理解持久化类和数据表之间的对应关系,也可以理解持久化类属性与数据库表列之间的对应关系
      在运行时 Hibernate 将根据这个映射文件来生成各种 SQL 语句
      映射文件的扩展名为 .hbm.xml

<hibernate-mapping>
    <class name="entity.CourseSelectUser" table="course_select_user" catalog="courseselectsystem" dynamic-update="true">  (class Name:指持久化类,table:指数据库中的表,catalog:指数据库  ,若设置为 true, 表示当更新一个对象时, 会动态生成 update 语句, update 语句中仅包含所有取值需要更新的字段. 默认值为 false  )
        <id name="id" type="java.lang.Integer">   name:类对象的属性
            <column name="id" />     对应的表中的字段
            <generator class="native"></generator>    指主键生成策略,一般写native
        </id>
        <property name="userNumber" type="java.lang.String"> name:类对象的属性  type:类对象的属性的数据类型
            <column name="user_number" not-null="true"></column>      对应的表中的字段
        </property>

       <!-- 映射派生属性 -->

       <property name="desc" formula="(SELECT concat(author, ': ', title) FROM NEWS n WHERE n.id = id)"></property>

    </class>
</hibernate-mapping>


generator: 设定持久化类设定标识符生成器


increment 标识符生成器

         1.increment 标识符生成器由 Hibernate 以递增的方式为代理主键赋值

         2.Hibernate 会先读取 NEWS 表中的主键的最大值, 而接下来向 NEWS 表中插入记录时, 就在 max(id) 的基础上递增, 增量为 1

         3.适用范围:1)由于 increment 生存标识符机制不依赖于底层数据库系统, 因此它适合所有的数据库系统,2)适用于只有单个 Hibernate 应用进程访问同一个数 据库的场合, 在集群环境下不推荐使用它

        4.OID 必须为 long, int 或 short 类型, 如果把 OID 定义为 byte 类型, 在运行时会抛出异常

identity 标识符生成器

        1.identity 标识符生成器由底层数据库来负责生成标识符, 它要求底层数据库把主键定义为自动增长字段类型

        2.适用范围:由于 identity 生成标识符的机制依赖于底层数据库系统, 因此, 要求底层数据库系统必须支持自动增长字段类型. 支持自动增长字段类型的数据库包括: DB2, Mysql, MSSQLServer, Sybase

        3.OID 必须为 long, int 或 short 类型, 如果把 OID 定义为 byte 类型, 在运行时会抛出异常

sequence 标识符生成器

       1.sequence  标识符生成器利用底层数据库提供的序列来生成标识符.

             
     
2.Hibernate 在持久化一个 News 对象时, 先从底层数据库的 news_seq 序列中获得一个唯一的标识号, 再把它作为主键值

      3.适用范围:由于 sequence 生成标识符的机制依赖于底层数据库系统的序列, 因此, 要求底层数据库系统必须支持序列. 支持序列的数据库包括: DB2, Oracle

hilo 标识符生成器

     1.hilo 标识符生成器由 Hibernate 按照一种 high/low 算法*生成标识符, 它从数据库的特定表的字段中获取 high 值.

                         

    2.Hibernate 在持久化一个 News 对象时, 由 Hibernate 负责生成主键值. hilo 标识符生成器在生成标识符时, 需要读取并修改 HI_TABLE 表中的 NEXT_VALUE 值.

    3.适用范围:  1)由于 hilo 生存标识符机制不依赖于底层数据库系统, 因此它适合所有的数据库系统。   2)OID 必须为 long, int 或 short 类型, 如果把 OID 定义为 byte 类型, 在运行时会抛出异常

native 标识符生成器

    1.native 标识符生成器依据底层数据库对自动生成标识符的支持能力, 来选择使用 identity, sequence 或 hilo 标识符生成器. 

    2.适用范围:  1)由于 native 能根据底层数据库系统的类型, 自动选择合适的标识符生成器, 因此很适合于跨数据库平台开发 .    2)OID 必须为 long, int 或 short 类型, 如果把 OID 定义为 byte 类型, 在运行时会抛出异常




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章