zoukankan      html  css  js  c++  java
  • hibernate相关配置文件

    hibernate.cfg.xml配置文件:

     1 <!DOCTYPE hibernate-configuration PUBLIC
     2 "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
     3 "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
     4 
     5 <hibernate-configuration>
     6   <session-factory>
     7     <!-- hibernate的方言,用来确定连接的数据库 -->
     8     <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
     9     <!-- 数据库的连接类 -->
    10     <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    11     <!-- 数据库的连接字符串和用户名密码 -->
    12     <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/itat_hibernate</property>
    13     <property name="hibernate.connection.username">root</property>
    14     <property name="hibernate.connection.password">123456</property>
    15     <!-- 在使用hibernate时会显示相应的SQL -->
    16     <property name="show_sql">true</property>
    17 
    18     <!-- 指定是否对输出的sql语句进行格式化 -->
    19     <property name="format_sql">true</property>
    20 
    21     <!-- 会自动完成类到数据表的转换 -->
    22     <property name="hibernate.hbm2ddl.auto">update</property>
    23     <!-- 加入实体类的映射文件 -->    
    24     <mapping resource="com/model/User.hbm.xml"/>
    25 
    26   </session-factory>
    27 </hibernate-configuration>
    hibernate.hbm2ddl.auto:该属性可帮助程序员实现正向工程, 即由 java 代码生成数据库脚本, 进而生成具体的表结构. 。
    取值 create | update | create-drop | validate
    –create : 会根据 .hbm.xml  文件来生成数据表, 但是每次运行都会删除上一次的表 ,重新生成表, 哪怕二次没有任何改变
    –create-drop : 会根据 .hbm.xml 文件生成表,但是SessionFactory一关闭, 表就自动删除
    –update : 最常用的属性值,也会根据 .hbm.xml 文件生成表, 但若 .hbm.xml  文件和数据库中对应的数据表的表结构不同, Hiberante  将更新数据表结构,但不会删除已有的行和列
    –validate : 会和数据库中的表进行比较, 若 .hbm.xml 文件中的列在数据表中不存在,则抛出异常
    •hibernate.jdbc.fetch_size:实质是调用 Statement.setFetchSize() 方法设定 JDBC 的 Statement 读取数据的时候每次从数据库中取出的记录条数。
    并不是所有的数据库都支持Fetch Size特性,MySQL就不支持。取值为100较合适。
    •hibernate.jdbc.batch_size:设定对数据库进行批量删除,批量更新和批量插入的时候的批次大小,类似于设置缓冲区大小的意思。batchSize 越大,批量操作时向数据库发送sql的次数越少,速度就越快。oracle取值为30较合适。
     

    实体类User的映射文件:

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE hibernate-mapping PUBLIC
     3       "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
     4           "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
     5 <!-- 属性package:指定一个包前缀,如果在映射文档中没有指定全限定的类名, 就使用这个作为包名 -->
     6 <hibernate-mapping package="com.bean">
     7     <!--class: 
     8         属性table:指定该持久化类映射的表名, Hibernate 默认以持久化类的类名作为表名
     9         属性select-before-update:设置 Hibernate 在更新某个持久化对象之前是否需要先执行一次查询. 默认值为 false
    10         -->
    11     <class name="Student" table="t_student" select-before-update="false">
    12         <!-- id:设定持久化类的对象标识符(OID)和表的主键的映射
    13                属性name: 标识持久化类 OID 的属性名  
    14                属性column: 设置标识属性所映射的数据表的列名(主键字段的名字). 
    15          -->
    16         <id name="id" column="id">
    17             <!-- 主键生成策略
    18                  属性class: 指定使用的标识符生成器全限定类名或其缩写名
    19             -->
    20             <generator class="native"/>
    21         </id>
    22         <!-- property 元素用于指定类的属性和表的字段的映射
    23               属性name:指定该持久化类的属性的名字
    24                column:指定与类的属性映射的表的字段名. 如果没有设置该属性, Hibernate 将直接使用类的属性名作为字段名. 
    25                type:指定 Hibernate 映射类型. Hibernate 映射类型是 Java 类型与 SQL 类型的桥梁. 
    26                               如果没有为某个属性显式设定映射类型, Hibernate 会运用反射机制先识别出持久化类的特定属性的 Java 类型, 
    27                               然后自动使用与之对应的默认的 Hibernate 映射类型.
    28                not-null:若该属性值为 true, 表明不允许为 null, 默认为 false
    29                access:指定 Hibernate 的默认的属性访问策略。默认值为 property, 即使用 getter, setter 方法来访问属性. 
    30                             若指定 field, 则 Hibernate 会忽略 getter/setter 方法, 而通过反射访问成员变量
    31                unique: 设置是否为该属性所映射的数据列添加唯一约束.
    32                length: 指定该属性所映射数据列的字段的长度  
    34          -->
    35         <property name="name" not-null="true" column="name" length="20"/>
    36         <!-- 
    37             name:设定待映射的持久化类的属性的名字
    38             column:设定和持久化类的属性对应的表的外键
    39             class:设定待映射的持久化类的属性的类型
    40          -->
    41         <many-to-one  name="classes" not-null="true" column="cid"/>
    42     </class>
    43 </hibernate-mapping>
     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE hibernate-mapping PUBLIC
     3       "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
     4           "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
     5 
     6 <hibernate-mapping package="com.bean">
     7     <class name="Car" table="t_car">
     8         <id name="id" column="carid">
     9             <generator class="native"/>
    10         </id>
    11         <property name="name" not-null="true" column="name"/>
    12         <!-- 
    13             inverse 属性决定双向关联中哪一方来维护表和表之间的关系.
    14             inverse = false 的为主动方,inverse = true 的为被动方, 由主动方负责维护关联关系.
    15             在 1-n 关系中,将 n 方设为主控方将有助于性能改善
    16          -->
    17         <set name="items" table="t_items" fetch="select" inverse="true">
    18             <!-- key元素设定与所关联的持久化类对应的表的外键
    19                  column: 指定关联表的外键名
    20              -->
    21             <key>
    22                 <column name="carid" not-null="true" />
    23             </key>
    24             <!-- class: 指定关联的持久化类的类名 -->
    25             <one-to-many class="Items"/>
    26         </set>
    27     </class>
    28 </hibernate-mapping>

    cascade 属性:

    •在对象关系映射文件中, 用于映射持久化类之间关联关系的元素, <set>,
    <many-to-one> 和 <one-to-one> 都有一个 cascade 属性, 它用于指定如何操纵与当前对象关联的其他对象. 

    cascade相关属性值如下:

    none : 当Session操作当前对象时,忽略其他关联对象。cascade的默认值;

    sava-update : 当通过Session的sava()、update()及saveOrUpdate()方法来保存或更新当前对象时,

                        级联保存所有关联的新建的临时对象,并且级联更新所有关联的游离对象。

    persist : 当通过Session的persist()方法来保存当前对象时,会级联保存所有关联的新建的临时对象。

    merge : 当通过Session的merge()方法来保存当前对象时,会级联融合所有关联的游离对象。

    delete : 当通过Session的delete()方法来删除当前对象时,会级联删除所有关联的对象。

    <set> 元素有一个 order-by 属性, 如果设置了该属性, 当 Hibernate 通过 select 语句到数据库中检索集合对象时, 利用 order by 子句进行排序
  • 相关阅读:
    day13-web前端之JS与JQuery
    day16-python项目Django框架之基础
    day12-HTML、CSS与blog页面讲解
    day11-MySQL数据操作索引备份触发器
    day10-python并发编程之多线程协程及MySQL
    day9-python并发编程之多进程多线程
    day8-异常处理与网络编程
    面向对象实战扩展(课外阅读)
    day7-面向对象之继承组合多态封装等
    python学习大纲
  • 原文地址:https://www.cnblogs.com/yzdqxing/p/4135181.html
Copyright © 2011-2022 走看看