Hibernate框架知识总结

  Hibernate框架是一个ORM(Object Relational Mapping,对象关系映射)开源框架,Hibernate框架中有两个文件,一个是Hibernate配置文件,开发时放置在src目录下,一般创建并取名为hibernate.cfg.xml,还有一种是方式是创建为hibernate.propeties,是实现Hibernate配置基础,是Hibernate能够友好的跟数据库进行交互。另一个文件是Hibernate映射文件,是实现javaBean与数据库表格的映射配置。

  Hibernate的配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<!--表明解析本XML文件的DTD文档位置,DTD是Document Type Definition 的缩写,即文档类型的定义,
 XML解析器使用DTD文档来检查XML文件的合法性。hibernate.sourceforge.net/hibernate-configuration-3.0dtd可以在Hibernate3.1.3软件包中的src\org\hibernate目录中找到此文件-->     
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
 <!--Hibernate配置文件的根元素,其他文件要包含在其中-->
 <hibernate-configuration>
 <!--SessionFactory是Hibernate中的一个类,这个类主要负责保存Hibernate的配置信息,以及对session的操作-->   
 <session-factory>
    <!--hibernate.dialect 只是Hibernate使用的数据库方言,就是要用Hibernate连接那种类型的数据库服务器。-->
  <property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
   <!--配置数据库的驱动程序,Hibernate在连接数据库时,需要用到数据库的驱动程序-->     
  <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
   <!--设置数据库的连接url:jdbc:mysql://localhost:3306/dbname,其中localhost表示mysql服务器名称,此处为本机,    dbname是数据库名-->      
  <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/Hibernates?characterEncoding=UTF-8</property>
  <!-- 连接数据库时数据的传输字符集编码方式 -->
  <property name="hibernate.connection.characterEncoding">UTF-8</property>
  <!--连接数据库时的用户名-->    
  <property name="hibernate.connection.username">root</property>
   <!--连接数据库时的密码-->     
  <property name="hibernate.connection.password">122016</property>
         
  <!--是否在后台显示Hibernate用到的SQL语句,开发时设置为true,便于差错,
          程序运行时可以在Eclipse的控制台显示Hibernate的执行Sql语句。项目部署后可以设置为false,提高运行效率-->    
  <property name="hibernate.show_sql">true</property>
  <!-- 格式化输出的Sql语句 -->
  <property name="hibernate.format_sql">true</property>
  <property name="hibernate.hbm2ddl.auto">update</property>  
   <!--指定映射文件,可映射多个映射文件--> 
 <!--   <mapping class="com.twm/entity.Person"/>
   <mapping class="com.twm/entity.IdCard"/>  -->
    <mapping resource="com/twm/entity/Student.hbm.xml"/>
   <mapping resource="com/twm/entity/Idcard.hbm.xml"/>
</session-factory>
</hibernate-configuration> 

配置文件中导入映射文件有两种方式:

1.直接导入实体类,但是在实体类中需要写@Entity注释,格式为<mapping class="com.twm/entity.Person"/>
   <mapping class="com.twm/entity.IdCard"/> 

2.导入映射文件,不需要写@Entity注释,格式为 <mapping resource="com/twm/entity/Student.hbm.xml"/>
   <mapping resource="com/twm/entity/Idcard.hbm.xml"/>

映射文件中的元素与属性:

<class>元素用于指定类和表之间的映射,其中包含一个<id>子元素以及多个<property>子元素

name属性设定类名。

table属性设定表名,默认以类名做表名,也可以自己设置。

id子元素设定持久化类(可以理解为javaBean)的OID和表的主键的映射关系。其中column元素指定表字段的名称,generator元素指定OID生成器。

property子元素设定类的其他属性和表的字段的映射关系。其中name属性对应类的属性名称,type指定属性的类型,column指定表字段的名称,not-null指定属性是否允许为空。

OID是对象标识符,OID是关系数据库表中的主键在java对象模型中的等价物,Hibernate采用OID来维持java持久化类和数据库表中的对应关系。Hibernate允许在持久化类中把OID定义为一下三种类型:short integer long。

Hibernate中的标识符生成器:

increment  identity  assigned  sequence  hilo  seqhilo native uuid.hex

Hibernate框架的映射关系:

一对多联系:分为实体一对多联系 单向一对多联系 双向一对多联系

<set>元素属性:name属性 指定要映射的属性名 cascade级联操作属性:save-upadte、delete、all、noone

 

一对一联系:1、主键关联映射,2、唯一外键关联映射(外键必须设定unique约束)。

多对多联系:实体多对多联系 数据库多对多联系  HIbernate多对多联系。

inserve属性与constrained属性

inverse的值是boolean值,也就是能设置为true或false。 如果一方的映射文件中设置为true,说明在映射关系(一对多,多对多等)中让对方来维护关系。如果为false,就自己来维护关系。默认值是true。 并且这属性只能在一端设置。比如一对多,这个一端。也就是在有set集合的这方设置。

constrained(约束) (可选) 表明该类对应的表对应的数据库表,和被关联的对象所对应的数据库表之间,通过一个外键引用对主键进行约束。这个选项影响save() 和delete() 在级联执行时的先后顺序(也在schema export tool中被使用)。

 

constrained默认值为false

constrained只能在one-to-one的映射中使用,(一般在主表的映射中,有外键的那个表)。如果constrained=true, 则表明存在外键与关联表对应,并且关联表中肯定存在对应的键与其对应, 另外该选项最关键的是影响save和delete的先后顺序。例如增加的时候,如果constainted=true,则会先增加关联表,然后增加本表。 删除的时候反之。


one-to-one的单向关联中,如果constrained=false,则会在查询时就全部取出来,用left outer join的方式。如果constrained=true,hibernate即会延迟加载sql,只把主表的查出来,等有用到关联表的再发sql取。


one-to- one的双向关联中,必须设置constrained=true,要不然会有重复数据读,如2个表user,car;在位false时sql如 下:select * from user a left outer join car b on a.id=b.id left outer join on user c on a.id=c.id where a.id=? 删除的时候最好删除从表,删除主表会先查询下主表,在联合查询下。
 

 

 

  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值