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