hibernate映射xml文件配置之一对多,多对多

简介: 一对多配置 【1】班级和学生模型       --->班级可容纳多个学生       --->学生只能属于一个班级 【2】一对多配置中的关系维护(inverse)       --->一端放弃关系的维护       --->多端进行关系维护。

 

一对多配置

【1】班级和学生模型

      --->班级可容纳多个学生

      --->学生只能属于一个班级

【2】一对多配置中的关系维护(inverse)

      --->一端放弃关系的维护

      --->多端进行关系维护。

  inverse默认值false,表示不放弃关系的维护。

  inverse="true"配置在那一端,表示那一端放弃关系的维护(交由hibernate内部进行维护),由另一端进行关系维护。

班级的ClassRoom.hbm.xml的配置文件

 1 <?xml version="1.0"?>
 2 <!DOCTYPE hibernate-mapping PUBLIC 
 3     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 4     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 5 <hibernate-mapping 
 6     package="com.bjsxt.shangxiaofei.po"><!-- 实体类包名,如果此处不加package属性,下面所有的class要写全路径:报名+类名 -->
 7 
 8     <class name="ClassRoom" table="t_classroom">
 9         
10         
11         <!-- 主键递增 -->
12         <id name="id" column="id">
13             <generator class="native"></generator>
14         </id>
15         
16         <!-- 班级名字 -->
17         <property name="name" column="name"></property>
18         
19         <!-- 班级的学生,班级对学生  一对多的关系   一端放弃关系的维护,多端进行维护,在set中inverse="true"-->
20         <set name="students" inverse="true">
21             <!-- 将班级的主键id在学生表中生成外键 -->
22             <key column="class_id"></key>
23             <one-to-many class="Student" />
24         </set>
25         
26         
27     </class>
28     
29 </hibernate-mapping>
View Code

学生的Student.hbm.xml的配置文件

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping 
    package="com.bjsxt.shangxiaofei.po"><!-- 实体类包名 -->

    <class name="Student" table="t_student">
        
        
        <!-- 主键递增 -->
        <id name="id" column="id">
            <generator class="native"></generator>
        </id>
        
        <!-- 学生名字 -->
        <property name="name" column="name"></property>
        <!-- 学生性别 -->
        <property name="sex" column="sex"></property>
        
        <!-- 学生的班级  学生对班级  多对一关系-->
        <many-to-one name="classRoom" class="ClassRoom">
            <!-- 学生表中的外键,是班级表的主键,此处与另一端指定的外键名必须相同 -->
            <column name="class_id"></column>
        </many-to-one>
        
    </class>
    
</hibernate-mapping>
View Code

二多对多配置

 

【1】学生和课程多对多模型

   --->一个学生可以选择多门课程

   --->一门课程可以拥有多个学生

【2】多对多配置中的关系维护(inverse)

     --->那一端内容修改的频繁,则放弃关系维护(学生放弃关系维护)

   --->那一端相对修改较少,那一端进行关系维护

学生的Student.hbm.xml的配置文件

 

 1 <?xml version="1.0"?>
 2 <!DOCTYPE hibernate-mapping PUBLIC 
 3     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 4     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 5 <hibernate-mapping 
 6     package="com.bjsxt.shangxiaofei.po"><!-- 实体类包名 -->
 7 
 8     <class name="Student" table="t_student">
 9         
10         
11         <!-- 主键递增 -->
12         <id name="id" column="id">
13             <generator class="native"></generator>
14         </id>
15         
16         <!-- 学生名字 -->
17         <property name="name" column="name"></property>
18         <!-- 学生性别 -->
19         <property name="sex" column="sex"></property>
20         
21         <!-- 学生课程,学生对课程 多对多关系  table是中间表的名字   学生信息修改频繁,放弃关系的维护-->
22         <set name="courses" table="student_course" inverse="true">
23             <!-- 本表在中间表中的外键 -->
24             <key column="student_id"></key>
25             <!-- 本表与对应表的映射关系,对应表在中间表的外键 -->
26             <many-to-many class="Course" column="course_id"></many-to-many>
27         </set>
28             
29     </class>
30     
31 </hibernate-mapping>
View Code

 

课程的Course.hbm.xml的配置文件

 

 1 <?xml version="1.0"?>
 2 <!DOCTYPE hibernate-mapping PUBLIC 
 3     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 4     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 5 <hibernate-mapping 
 6     package="com.bjsxt.shangxiaofei.po"><!-- 实体类包名 -->
 7 
 8     <class name="Course" table="t_course">
 9         
10         
11         <!-- 主键递增 -->
12         <id name="id" column="id">
13             <generator class="native"></generator>
14         </id>
15         
16         <!-- 课程的名字 -->
17         <property name="name" column="name"></property>
18         
19         <!-- 课程拥有的学生 课程对学生 多对多的关系 table表示中间表的名字 -->
20         <set name="students" table="student_course">
21             <!-- 本表在中间表的外键 -->
22             <key column="course_id"></key>
23             <!-- 本表与对应表的映射关系,column表示对应表在中间表的外键名字 -->
24             <many-to-many class="Student" column="student_id"></many-to-many>
25         </set>
26     </class>
27     
28 </hibernate-mapping>
View Code

 

 

三hibernate的查询通道的建立:

 [1]单向关联

    --->只能通过A端查询到B端。利用面向对象的思想,也就是hql语句。

           --->如果想从B端查询到A端,就需要写原始sql语句。

  例子:学生和班级模型 student ---classRoom

        单向:在student类中建立classRoom的属性。而在ClassRoom的类中,不要建立Set<Student>的集合类。

        映射xml文件按照类信息配置,也就是说只有一端有配置。则为单向查询通道的建立。

 [2]双向关联

    --->通过A端可以查询到B端,通过B端也可以查询到A端

           --->双向查询,不需要写原始sql语句,只需要按着面向对象的思想操作数据库。hql

     例子:学生班级模型  student-classRoom

     在Student类中建立ClassRoom的属性。在ClassRoom的类中建立Set<Student> 的集合属性。然后xml配置文件,按照类信息,进行映射。则为双向查询通道的建立。

相关实践学习
在云上部署ChatGLM2-6B大模型(GPU版)
ChatGLM2-6B是由智谱AI及清华KEG实验室于2023年6月发布的中英双语对话开源大模型。通过本实验,可以学习如何配置AIGC开发环境,如何部署ChatGLM2-6B大模型。
相关文章
|
XML Java 数据格式
Spring容器Bean之XML配置方式
通过对以上内容的掌握,开发人员可以灵活地使用Spring的XML配置方式来管理应用程序的Bean,提高代码的模块化和可维护性。
506 6
|
XML Java 数据格式
Spring IOC—基于XML配置Bean的更多内容和细节(通俗易懂)
Spring 第二节内容补充 关于Bean配置的更多内容和细节 万字详解!
810 18
Spring IOC—基于XML配置Bean的更多内容和细节(通俗易懂)
|
XML Java 应用服务中间件
springMVC01,springMVC的执行流程【第一个springMVC例子(XML配置版本):HelloWorld】
通过一个HelloWorld实例,介绍了SpringMVC的基本概念、执行流程,并详细讲解了如何创建和配置第一个SpringMVC项目(基于XML)。
springMVC01,springMVC的执行流程【第一个springMVC例子(XML配置版本):HelloWorld】
|
XML 分布式计算 资源调度
大数据-02-Hadoop集群 XML配置 超详细 core-site.xml hdfs-site.xml 3节点云服务器 2C4G HDFS Yarn MapRedece(一)
大数据-02-Hadoop集群 XML配置 超详细 core-site.xml hdfs-site.xml 3节点云服务器 2C4G HDFS Yarn MapRedece(一)
605 5
|
XML 资源调度 网络协议
大数据-02-Hadoop集群 XML配置 超详细 core-site.xml hdfs-site.xml 3节点云服务器 2C4G HDFS Yarn MapRedece(二)
大数据-02-Hadoop集群 XML配置 超详细 core-site.xml hdfs-site.xml 3节点云服务器 2C4G HDFS Yarn MapRedece(二)
687 5
|
分布式计算 资源调度 Hadoop
大数据-01-基础环境搭建 超详细 Hadoop Java 环境变量 3节点云服务器 2C4G XML 集群配置 HDFS Yarn MapRedece
大数据-01-基础环境搭建 超详细 Hadoop Java 环境变量 3节点云服务器 2C4G XML 集群配置 HDFS Yarn MapRedece
440 4
|
XML Java 数据格式
手动开发-简单的Spring基于XML配置的程序--源码解析
手动开发-简单的Spring基于XML配置的程序--源码解析
346 0
|
11月前
|
Android开发 开发者
Android自定义View之不得不知道的文件attrs.xml(自定义属性)
本文详细介绍了如何通过自定义 `attrs.xml` 文件实现 Android 自定义 View 的属性配置。以一个包含 TextView 和 ImageView 的 DemoView 为例,讲解了如何使用自定义属性动态改变文字内容和控制图片显示隐藏。同时,通过设置布尔值和点击事件,实现了图片状态的切换功能。代码中展示了如何在构造函数中解析自定义属性,并通过方法 `setSetting0n` 和 `setbackeguang` 实现功能逻辑的优化与封装。此示例帮助开发者更好地理解自定义 View 的开发流程与 attrs.xml 的实际应用。
325 2
Android自定义View之不得不知道的文件attrs.xml(自定义属性)
|
XML 前端开发 Java
讲解SSM的xml文件
本文详细介绍了SSM框架中的xml配置文件,包括springMVC.xml和applicationContext.xml,涉及组件扫描、数据源配置、事务管理、MyBatis集成以及Spring MVC的视图解析器配置。
355 1
|
XML Java 数据格式
Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)
这篇文章是Spring5框架的实战教程,主要介绍了如何在Spring的IOC容器中通过XML配置方式使用外部属性文件来管理Bean,特别是数据库连接池的配置。文章详细讲解了创建属性文件、引入属性文件到Spring配置、以及如何使用属性占位符来引用属性文件中的值。
Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)