Mybatis 多表实现多对一查询、添加操作
阅读原文时间:2023年07月08日阅读:1

Mybatis 多表实现多对一查询、添加操作

学习内容:


1.1、需求

保存一个部门和两个员工,且这两个员工都是这个部门的。

1.2、数据库表(多对一或一对多,数据库外键都是设置在多的一方)

  • 表结构

1.3、类设计

  • Department 实体类

    package com.yy.domain;
    @Setter
    @Getter
    @ToString
    public class Department {
    private Long id;
    private String name;
    }

  • Employee 实体类

    package com.yy.domain;
    @Setter
    @Getter
    @ToString
    public class Employee {
    private Long id;
    private String name;
    // 关联属性
    private Department dept;
    }

1.4、Mapper 接口和 Mapper XML 文件编写

注意: Mapper XML 放置的位置是在 resources 目录下。

  • DepartmentMapper 接口

    package com.yy.mapper;
    public interface DepartmentMapper {
    void save(Department dept);
    }

  • DepartmentMapper.xml 文件

    INSERT INTO department(name) VALUES(#{name})

  • EmployeeMapper 接口

    package com.yy.mapper;
    public interface EmployeeMapper {
    void save(Employee employee);
    }

  • EmployeeMapper.xml 文件

    INSERT INTO employee(name, deptId) VALUES(#{name}, #{dept.id})

1.5、编写单元测试类

public class Many2oneTest {
    // 保存一个部门和两个员工,且这两个员工都是这个部门的
    @Test
    public void testSave() throws Exception {
        Department dept = new Department();
        dept.setName("开发部");
        Employee e1 = new Employee();
        e1.setName("张三");
        e1.setDept(dept);
        // 设置关系
        Employee e2 = new Employee();
        e2.setName("李四");
        e2.setDept(dept);
        // 设置关系
        SqlSession session = MyBatisUtil.getSession();
        DepartmentMapper departmentMapper = session.getMapper(DepartmentMapper.class);
        EmployeeMapper employeeMapper = session.getMapper(EmployeeMapper.class);
        // 先保存部门再保存员工
        departmentMapper.save(dept);
        employeeMapper.save(e1);
        employeeMapper.save(e2);
        session.commit();
        session.close();
    }
}

2.1、需求

根据员工 id 查询员工,并知道该员工的所在的部门。

2.2、需要添加 Mapper 接口 和 Mapper XML

  • DepartmentMapper 接口

    package com.yy.mapper;
    public interface DepartmentMapper {
    Department get(Long id);
    }

  • DepartmentMapper.xml 文件

  • EmployeeMapper 接口

    package com.yy.mapper;
    public interface EmployeeMapper {
    Employee get(Long id);
    }

  • EmployeeMapper.xml 文件

2.3、单元测试方法

public class Many2oneTest {
    @Test
        public void testGet() throws Exception {
        SqlSession session = MyBatisUtil.getSession();
        EmployeeMapper employeeMapper = session.getMapper(EmployeeMapper.class);
        Employee employee = employeeMapper.get(1L);
        System.out.println(employee); session.close();
    }
}

总结:

以上就是使用 Mybatis 多表实现多对一查询、添加操作了,代码仅供参考,欢迎讨论交流。