zoukankan      html  css  js  c++  java
  • mybatis 梳理15--搭建多表环境、在“多”的一方维护、在“一”的一方维护(重要)

    部门和员工的关系,一个部门多个员工,一个员工属于一个部门

    我们可以采取两种方式来维护关系,一种在“一”的一方,一种在“多”的一方!

    数据库设计

    CREATE TABLE `dept` (
    `id` INT(10) NOT NULL,
    `name` VARCHAR(30) DEFAULT NULL,
    PRIMARY KEY (`id`)
    )
    INSERT INTO dept VALUES (1, '欣知开发四部');
    CREATE TABLE `employee` (
    `id` INT(10) NOT NULL,
    `name` VARCHAR(30) DEFAULT NULL,
    `did` INT(10) DEFAULT NULL,
    PRIMARY KEY (`id`),
    CONSTRAINT `fk_did` FOREIGN KEY (`did`) REFERENCES `dept` (`id`)
    )
    INSERT INTO employee VALUES (1, '邸智伟', 1);
    INSERT INTO employee VALUES (2, '成虹', 1);
    INSERT INTO employee VALUES (3, '康永亮', 1);
    INSERT INTO employee VALUES (4, '杨春旺', 1);
    INSERT INTO employee VALUES (5, '陈建强', 1);

    三种方式

    1、自己手动维护

    自己维护,多写几个语句,使用java组装,有时候使用mybatis维护关系反而复杂,不如自己维护。

    (1)先搜索部门

    (2)根据部门搜索员工

    (3)手动拼装

    2、在多的一方维护关系

    准备工作:

    (1) 编写实体类

    部门Dept

    员工Employee

    @Data
    public class Dept {
      private int id;
      private String name;
    }
    @Data
    public class Employee {
      private int id;
      private String name;
      
    //维护关系!!!!!!!!!!!!!!!!!!!!!!!!!!!!   private Dept dept; }

    (2)编写实体类对应的Mapper接口

    public interface DeptMapper {
    }
    public interface EmployeeMapper {
    }

    (3)编写Mapper接口对应的 mapper.xml配置文件

    DeptMapper.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper
    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    
    <mapper namespace="com.xinzhi.dao.DeptMapper">
    </mapper>

    EmploteeMapper.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper
    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    
    <mapper namespace="com.xinzhi.dao.EmployeeMapper">
    </mapper>

    按查询嵌套,级联查询处理,就像SQL中的子查询

    (1)写方法

    /**
    * 获取所有的员工
    * @return
    */
    List<Employee> findAllEmployees();

    (2)mapper处理

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper
    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    
    <mapper namespace="com.xinzhi.dao.EmployeeMapper">
    
        <resultMap id="EmployeeDept" type="com.xinzhi.entity.Employee">
          <!--association关联属性 property属性名 javaType属性类型 column在多的一方的表中的列名-->
          <association property="dept" column="dId" javaType="com.xinzhi.entity.Dept" select="getDept"/>
        </resultMap>
    
        <select id="findAllEmployees" resultMap="EmployeeDept">
        select * from employee
        </select>
    
        <select id="getDept" resultType="com.xinzhi.entity.Dept">
        select * from dept where id = #{id}
        </select>
    </mapper>                

    (3)编写完毕去Mybatis配置文件中,注册Mapper

    (4)测试

    @Test
    public void testFindAllEmployees() {
        EmployeeMapper mapper = session.getMapper(EmployeeMapper.class);
        List<Employee> allEmployees = mapper.findAllEmployees();
        for (Employee allEmployee : allEmployees) {
            System.out.println(allEmployee);
        }
    }
        

     

    按结果嵌套处理,就像SQL中的联表查询 

    1、接口方法编写

    List<Employee> findAllEmployees2();

    2、编写对应的mapper文件

    <select id="findAllEmployees2" resultMap="EmployeeDept2" >
    select e.id eid,e.name ename, d.id did,d.name dname
    from employee e,dept d
    where d.id = e.did
    </select>
    
    <resultMap id="EmployeeDept2" type="com.xinzhi.entity.Employee">
        <id property="id" column="eid"/>
        <result property="name" column="ename"/>
    
        <!--关联对象property 关联对象在Student实体类中的属性-->
        <association property="dept" javaType="com.xinzhi.entity.Dept">
            <id property="id" column="did"/>
            <result property="name" column="dname"/>
        </association>
    
    </resultMap>

    3、去mybatis-config文件中配置

    <mapper resource="com/xinzhi/dao/DeptMapper.xml"/>
    <mapper resource="com/xinzhi/dao/EmployeeMapper.xml"/>

    4、测试

    @Test
    public void testFindAllEmployees2() {
        EmployeeMapper mapper = session.getMapper(EmployeeMapper.class);
        List<Employee> allEmployees = mapper.findAllEmployees2();
        for (Employee allEmployee : allEmployees) {
           System.out.println(allEmployee);
        }
    }

     

    3、在一的一方维护关系

     实体类:

    @Data
    public class Dept {
    private int id;
    private String name;
    //用于关系维护!!!!!!!!!!!!!!!!!!!!!
    List<Employee> employees;
    }
    @Data
    public class Employee {
      private int id;
      private String name;
    }

    按结果嵌套处理

    按查询嵌套处理

  • 相关阅读:
    demo12-回到顶部
    demo11-友情链接
    demo10-超链接标签
    demo09-程序员练习
    demo08-图片标签
    demo07-盒子标签
    demo06-字体标签
    demo05-换行标签
    转&nbsp;j2ee&nbsp;.线程池.对象池,连接池
    几种开源Java&nbsp;Web容器线程池…
  • 原文地址:https://www.cnblogs.com/Master-Sun/p/14313379.html
Copyright © 2011-2022 走看看