星生

导航

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 子句进行排序

 

posted on 2014-12-01 15:31  Q星ZX  阅读(154)  评论(0编辑  收藏  举报