ORM的实现思想就是将关系数据库中表的数据映射成对象。以对象的形式展现,这样开发者就能够把对数据库的操作转化为对这些对象的操作。Hibernate正是实现了这样的思想,达到了方便开发者以面向对象的思想来实现对数据库的操作。

  Hibernate在实现ORM功能的时候主要用到的文件有:映射类(*.java)映射文件(*.hbm.xml)数据库配置文件(*.properties/*.cfg.xml)。它们各自的作用例如以下。

  映射类(*.java):它是描写叙述数据库表的结构,表中的字段在类中被描写叙述成属性,将来就能够实现把表中的记录映射成为该类的对象了。

  映射文件(*.hbm.xml):它是指定数据库表和映射类之间的关系。包含映射类和数据库表的相应关系、表字段和类属性类型的相应关系以及表字段和类属性名称的相应关系等。

  数据库配置文件(*.properties/*.cfg.xml):它是指定与数据库连接时须要的连接信息。比方连接哪种数据库、登录数据库的username、登录password以及连接字符串等,另一个重要的内容就是实体映射文件。

hibernate.cfg.xml

  1. <hibernate-configuration>
  2. <session-factory>
  3. <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
  4. <property name="hibernate.connection.url">jdbc:mysql://localhost:8082/hibernate_first</property>
  5. <property name="hibernate.connection.username">admin123</property>
  6. <property name="hibernate.connection.password">admin123</property>
  7. <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
  8. <property name="hibernate.show_sql">true</property>
  9.  
  10. <mapping resource="com/bjpowernode/hibernate/User.hbm.xml"/>
  11. </session-factory>
  12. </hibernate-configuration>

  因为数据库表中的关系要通过实体关系表现出来,因此,便出现了Hibernate的映射关系。通过这样的映射关系。来表现相应数据库表之间的关系!

映射关系:

  一、单向映射:

   1、一对一关联:

     两个对象之间一对的关系。比如:Person(人)-IdCard(身份证)。这样的映射有两种策略:

     *主键关联:通过两个实体的主键进行关联。

 

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhbmdsZWlsZWk0ODY5/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" style="font-family:KaiTi_GB2312; font-size:18px; text-align:center">

      

      映射实现:在一端加入<one-to-one />
  1. <hibernate-mapping>
  2. <class name="com.bjpowernode.hibernate.Person" table="t_person">
  3. <id name="id">
  4. <generator class="foreign">
  5. <param name="property">idCard</param>
  6. </generator>
  7. </id>
  8. <property name="name"/>
  9.  
  10. <one-to-one name="idCard" constrained="true"/>
  11. </class>
  12. </hibernate-mapping>


     *唯一外键关联:外键关联,本来是用于多对一的配置,可是加上唯一的限制之后(採用<many-to-one>标签来映射。指定多的一端unique为true,这样就限制了多的一端的多重性为一)。也能够用来表示一对一关联关系,事实上它就是多对一的特殊情况。



      映射实现:在单向一端加入<many-to-one />


  1. <hibernate-mapping>
  2. <class name="com.bjpowernode.hibernate.Person" table="t_person">
  3. <id name="id">
  4. <generator class="native"/>
  5. </id>
  6. <property name="name"/>
  7. <many-to-one name="idCard" unique="true"/>
  8. </class>
  9. </hibernate-mapping>

    2、多对一关联:

           

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhbmdsZWlsZWk0ODY5/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">



     映射实现:在多的一端加入<many-to-one />  


  1. <hibernate-mapping>
  2. <class name="com.bjpowernode.hibernate.User" table="t_user">
  3. <id name="id">
  4. <generator class="native"/>
  5. </id>
  6. <property name="name"/>
  7. <many-to-one name="group" column="groupid" cascade="save-update"/>
  8. </class>
  9. </hibernate-mapping>


    3、一对多关联:

    一对多关联映射和多对一关联映射原理是一致的。都是在多的一端增加一个外键,指向一的一端



     映射实现:在一的一端加入<one-to-many />


  1. <hibernate-mapping>
  2. <class name="com.bjpowernode.hibernate.Classes" table="t_classes">
  3. <id name="id">
  4. <generator class="native"/>
  5. </id>
  6. <property name="name"/>
  7. <set name="students">
  8. <key column="classesid"/>
  9. <one-to-many class="com.bjpowernode.hibernate.Student"/>
  10. </set>
  11. </class>
  12. </hibernate-mapping>




    4、多对多关联:

  多对多关联映射新添加一张表才完毕基本映射,例如以下图




      映射实现:在单向多的一端加入<many-to-many />标签



  1. <hibernate-mapping>
  2. <class name="com.bjpowernode.hibernate.User" table="t_user">
  3. <id name="id">
  4. <generator class="native"/>
  5. </id>
  6. <property name="name"/>
  7. <set name="roles" table="t_user_role">
  8. <key column="user_id"/>
  9. <many-to-many class="com.bjpowernode.hibernate.Role" column="role_id" />
  10. </set>
  11. </class>
  12. </hibernate-mapping>



  二、双向映射:

    1、一对一关联映射

    映射实现:在两端加入<one-to-one/>标签

  1. <hibernate-mapping>
  2. <class name="com.bjpowernode.hibernate.IdCard" table="t_idCard">
  3. <id name="id">
  4. <generator class="native"/>
  5. </id>
  6. <property name="cardNo"/>
  7. <one-to-one name="person"/>
  8. </class>
  9. </hibernate-mapping>
  1. <hibernate-mapping>
  2. <class name="com.bjpowernode.hibernate.Person" table="t_person">
  3. <id name="id">
  4. <generator class="foreign">
  5. <param name="property">idCard</param>
  6. </generator>
  7. </id>
  8. <property name="name"/>
  9. <one-to-one name="idCard" constrained="true"/>
  10. </class>
  11. </hibernate-mapping>

    2、一对多关联映射

    映射实现:多的一端加入<many-to-one/>标签,一的一端加入<one-to-many/>标签

  1. <hibernate-mapping>
  2. <class name="com.bjpowernode.hibernate.Classes" table="t_classes">
  3. <id name="id">
  4. <generator class="native"/>
  5. </id>
  6. <property name="name"/>
  7. <set name="students" inverse="true">
  8. <key column="classesid"/>
  9. <one-to-many class="com.bjpowernode.hibernate.Student"/>
  10. </set>
  11. </class>
  12. </hibernate-mapping>

  1. <hibernate-mapping>
  2. <class name="com.bjpowernode.hibernate.Student" table="t_student">
  3. <id name="id">
  4. <generator class="native"/>
  5. </id>
  6. <property name="name"/>
  7. <many-to-one name="classes" column="classesid"/>
  8. </class>
  9. </hibernate-mapping>

    3、多对多关联映射:

    映射实现:两端都加入<many-to-many/>标签

  1. <hibernate-mapping>
  2. <class name="com.bjpowernode.hibernate.Role" table="t_role">
  3. <id name="id">
  4. <generator class="native"/>
  5. </id>
  6. <property name="name"/>
  7. <set name="users" table="t_user_role">
  8. <key column="role_id" not-null="true"/>
  9. <many-to-many class="com.bjpowernode.hibernate.User" column="user_id"/>
  10. </set>
  11. </class>
  12. </hibernate-mapping>

  1. <hibernate-mapping>
  2. <class name="com.bjpowernode.hibernate.User" table="t_user">
  3. <id name="id">
  4. <span style="white-space:pre"> </span><generator class="native"/>
  5. </id>
  6. <property name="name"/>
  7. <set name="roles" table="t_user_role">
  8. <key column="user_id" not-null="true"/>
  9. <many-to-many class="com.bjpowernode.hibernate.Role" column="role_id" />
  10. </set>
  11. </class>
  12. </hibernate-mapping>

  二、小结:

  通过Hiberante的映射关系。从而实现了数据库表中的相对复杂的表关系。

PS:Hibernate的这几种映射关系和EJB的映射关系。大同小异。

SSH框架之Hibernate(1)——映射关系的更多相关文章

  1. java框架篇---hibernate(一对一)映射关系

    对象-关系映射(Object/Relation Mapping,简称ORM),是随着面向对象的软件开发方法发展而产生的,是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术,本质上就是将数据从 ...

  2. SSH框架中hibernate 出现 user is not mapped 问题

    SSH框架中hibernate 出现 user is not mapped 问题      在做SSH框架整合时,在进行DAO操作时.这里就只调用了chekUser()方法.运行时报  user is ...

  3. Hibernate关联映射关系

    Hibernate关联映射关系 一.双向一对多关联映射关系:当类与类之间建立了关联,就可以方便的从一个对象导航到另一个或另一组与它关联的对象(一对多双向关联和多对一双向关联是完全一样的) 1.1创建实 ...

  4. Java三大框架之——Hibernate关联映射与级联操作

    什么是Hibernate中的关联映射? 简单来说Hibernate是ORM映射的持久层框架,全称是(Object Relational Mapping),即对象关系映射. 它将数据库中的表映射成对应的 ...

  5. SSH框架之hibernate《四》

    hibernate第四天     一.JPA相关概念         1.1JPA概述             全称是:Java Persistence API.是sun公司推出的一套基于ORM的规范 ...

  6. SSH框架之hibernate《二》

    Hibernate第二天     一.hibernate的持久化类和对象标识符         1.1持久化类的编写规范             1.1.1什么是持久化类:               ...

  7. SSH框架之Hibernate《一》

    hibernate的基础入门 一:hibernate和ORM的概念部分         1.1hibernate概述:             Hibernate框架是当今主流的Java持久层框架之一 ...

  8. SSH框架之Hibernate第四篇

    Hibernate中有两套实现数据库数据操作的方式 : hibernate前3天讲解的都是 : hibernate自己的操作方式(纯XML配置文件的方式) 另一种方式是基于JPA的操作方式(通过注解的 ...

  9. SSH框架之Hibernate第二篇

    1.1 持久化类的编写规则 1.1.1 什么是持久化类? 持久化类 : 与表建立了映射关系的实体类,就可以称之为持久化类. 持久化类 = Java类 + 映射文件. 1.1.2 持久化类的编写规则 ( ...

随机推荐

  1. VMware: linux起步提示 memory for crashkernel(0*0 to 0*0)not within permissible

    (virtualbox/VMware)linux起步提示memoryforcrashkernel(0*0 to 0*0)notwithinpermissible  http://www.myexcep ...

  2. oracle 集合变量以及自定义异常的用法

    oracle 集合变量以及自定义异常的用法, 在过程 record_practice 有record变量和自定义异常的用法实例.具体在3284行. CREATE OR REPLACE Package ...

  3. YII2 使用js

    1.在 /backend/assets/ 中新建一个文件 CollectionAsset.php <?php /** * @link http://www.yiiframework.com/ * ...

  4. Qt setStyleSheet 添加背景色/背景图片(取消背景色,读取本地文件作为背景色)

    容易搞定,mainWindow 是一个QWidget.// 设置背景色为蓝色mainWindow.setStyleSheet("background-color:blue;"); ...

  5. QT直接支持GB18030,附它对此编码的一堆相关文档描述

    http://doc.qt.io/qt-5/qtextcodec.html http://doc.qt.io/qt-5/codec-gbk.html

  6. SICP 习题 (2.7) 解题总结 : 定义区间数据结构

    SICP 习题 2.7 開始属于扩展练习,能够考虑不做,对后面的学习没什么影响.只是,假设上面的使用过程表示序对,还有丘奇计数你都能够理解的话,完毕这些扩展练习事实上没什么问题. 习题2.7是要求我们 ...

  7. 用了好多年的XP换成了Win7

    因为懒,所以工作的笔记本XP一直没有换 网卡故障被逼无奈正好升成Win7 顺便看了一下市场占有率,Win7已经百分之四十多了,去年就超过XP了 不过XP也够持久的了,都十二年了,有这样长寿的产品对哪家 ...

  8. activity变成Dialog的步骤

    1.在布局文件上最外层最好使用RelativeLayout来布局,如果使用LinearLayout来布局的话,显示对话框的话,感觉会有点问题: 要在预览中看到框框,并且是match_parent的,而 ...

  9. ThinkPHP - URL - 伪静态 - 路由 - 重写

    URL: 一.URL规则 1.默认是区分大小写,可以修改(配置文件)为不区分大小写. 2. //修改URL大小写问题 'URL_CASE_INSENSITIVE' =>true, 如果模块名为 ...

  10. Fundamental types

    Fundamental types void type boolean type character types integer types Modifiers signedness size Pro ...