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大模型。
相关文章
|
11月前
|
SQL XML Java
菜鸟之路Day35一一Mybatis之XML映射与动态SQL
本文介绍了MyBatis框架中XML映射与动态SQL的使用方法,作者通过实例详细解析了XML映射文件的配置规范,包括namespace、id和resultType的设置。文章还对比了注解与XML映射的优缺点,强调复杂SQL更适合XML方式。在动态SQL部分,重点讲解了`&lt;if&gt;`、`&lt;where&gt;`、`&lt;set&gt;`、`&lt;foreach&gt;`等标签的应用场景,如条件查询、动态更新和批量删除,并通过代码示例展示了其灵活性与实用性。最后,通过`&lt;sql&gt;`和`&lt;include&gt;`实现代码复用,优化维护效率。
1057 5
|
XML Java 数据格式
Spring容器Bean之XML配置方式
通过对以上内容的掌握,开发人员可以灵活地使用Spring的XML配置方式来管理应用程序的Bean,提高代码的模块化和可维护性。
502 6
|
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(一)
604 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(二)
685 5
|
分布式计算 资源调度 Hadoop
大数据-01-基础环境搭建 超详细 Hadoop Java 环境变量 3节点云服务器 2C4G XML 集群配置 HDFS Yarn MapRedece
大数据-01-基础环境搭建 超详细 Hadoop Java 环境变量 3节点云服务器 2C4G XML 集群配置 HDFS Yarn MapRedece
436 4
|
XML Java 数据格式
手动开发-简单的Spring基于XML配置的程序--源码解析
手动开发-简单的Spring基于XML配置的程序--源码解析
341 0
|
SQL 缓存 Java
框架分析(9)-Hibernate
框架分析(9)-Hibernate
|
缓存 Java 数据库连接
Hibernate:Java持久层框架的高效应用
通过上述步骤,可以在Java项目中高效应用Hibernate框架,实现对关系数据库的透明持久化管理。Hibernate提供的强大功能和灵活配置,使得开发者能够专注于业务逻辑的实现,而不必过多关注底层数据库操作。
263 1
|
SQL Java 数据库连接
Hibernate 是一款开源 ORM(对象关系映射)框架,封装了 JDBC,允许以面向对象的方式操作数据库,简化了数据访问层的开发。
Hibernate 是一款开源 ORM(对象关系映射)框架,封装了 JDBC,允许以面向对象的方式操作数据库,简化了数据访问层的开发。通过映射机制,它可以自动处理对象与数据库表之间的转换,支持主流数据库,提高了代码的可移植性和可维护性。其核心接口包括 SessionFactory、Session 和 Transaction 等,通过它们可以执行数据库的 CRUD 操作。配置方面,需在项目中引入 Hibernate 及数据库驱动依赖,并创建 `hibernate.cfg.xml` 配置文件来设置数据库连接和 Hibernate 行为参数。
301 1

相关课程

更多
下一篇
开通oss服务