Mybtais关系映射问题 多对一 一对多

图片说明哪位大神给解释一下这道题呗,正常不是一对多才会用 标签的吗

关联映射之一对多、多对一映射

一、需求:
部门与员工
一个部门有多个员工 【一对多】
多个员工,属于一个部门 【多对一】

二、逻辑分析:

三、代码实现
1、javabean及映射文件的配置:
1)Employee.java、Employee.hbm.xml

2)Dept.java、Dept.hbm.xml

完整的Dept.hbm.xml配置:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">






<!--
一对多关联映射的配置(通过部门管理员工)
Dept 映射关键点:
1. 指定 映射的集合属性: "emps"
2. 集合属性对应的集合表: "t_employee"
3. 集合表的外键字段 "t_employee. dept_id"
4. 集合元素的类型

        table="t_employee"可以省略,
        因为有对应的<one-to-many class="Employee"/>,
        并且可以找到Employee.hbm.xml
        如果写上,那么talbe的值"t_employee"一定要与
        Employee.hbm.xml(<class name="Employee" table="t_employee">)中的表名一致
     -->
    <set name="emps" table="t_employee">
        <!-- 
            colunmn的值(dept_id),一定要与Employee.hbm.xml中的
            <many-to-one name="dept" column="dept_id" class="Dept"></many-to-one>
            的colunm值一致
         -->
        <key column="dept_id"></key>
        <!-- 
            class指定集合元素类型,sram.oneTomany.Employee,
            但是因为<hibernate-mapping package="sram.oneTomany" auto-import="true">
            这里已经指定包名,所以只写Employee就OK
        -->
        <one-to-many class="Employee"/>
    </set>


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
2、测试类App1_save.java——实现保存的功能

package sram.oneToMany;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.junit.Test;

public class App1_save {
public static SessionFactory sf;
static{
sf = new Configuration()
.configure()
.addClass(Dept.class)
.addClass(Employee.class)//测试使用
.buildSessionFactory();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
1)部门方(一的一方操作)

2)【推荐】员工方(多的一方操作)

3、数据库结果:
1)员工表:

2)部门表:

4、测试类App2_get.java——实现保存的功能

package sram.oneToMany;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.junit.Test;

public class App1_save {
public static SessionFactory sf;
static{
sf = new Configuration()
.configure()
.addClass(Dept.class)
.addClass(Employee.class)//测试使用
.buildSessionFactory();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
1)通过部门方获取另一方:

2)通过员工方获取另一方:

四、总结:
1、在一对多与多对一的关联关系中,保存数据最好通过多的一方来维护关系,这样可以减少update语句的生成,从而提高hibernate的执行效率!

2、概念:
配置一对多与多对一,这种叫“双向关联”
只配置一对多,叫“单向一对多”

只配置多对一,叫“单向多对一”

作者:Cool_Tomato
来源:CSDN
原文:https://blog.csdn.net/qq_34944851/article/details/53737332
版权声明:本文为博主原创文章,转载请附上博文链接!