• (二十五)JDBC多表查询




    java易错点

    • 数组初始化的时候,可以用 {} 赋值,初始化以后,只能用 new Object[] 赋值了 ;

    • set 集合的 add()addAll() 方法,前者将集合作为整体保存到集合中,后者将集合中的每一个元素保存到集合中;


    一对多 VS 多对一 VS 多对多

    表的关系,具体是选择 一对多多对一 还是 多对多,在查询显示的时候,怎么显示,主要看我们的实际需求,显示一方的时候,是否需要显示另一方

    比如员工和部门的例子,部门表和员工表,就不应该选择 双向绑定 关系;因为在展示部门的时候,不需要将其下面的员工全部显示出来的;

    还有一点,就是多的一方数据很多,我们需要采用分页的技术进行显示;

    一对多 尽量避免,除非非要使用(比如订单)。使用的时候要注意数据量问题;


    级联

    ·如果没设置级联,则需要先将依赖表的外键列置空。才能删除被依赖表 ;

    ·设置了级联 (当删除被依赖表的记录时候,会自动将依赖表的外键列置空 )

    set null :当外键依赖被删除的时候,会自动将外键列置空 ;

    cascard : 当外键依赖被删除的时候 ,外键所在记录也会被删除 ;


    多表增删改

    ·一对多 (部门与员工)
    
        其实也可以使用面向对象的思想设计表,但是我们查找多方的时候,注意下,是否需要查找 ;
    
    
    ·多对多 (学生与老师)
    
        查询老师的学生,真正的多表操作 ,先去中间表查询该老师有哪些学生id,再去学生表,查找对应id的学生;
    
    
    
    ·查询:(无论什么关系。多对多、一对多。。。我们在设计对象的时候,在少的一方,里面都设计上集合存储多的一方,但是查询的时候,根据情况绝对是否真的要查询 ;)
    
    
    ·一对多:不需要多表查询;显示与不显示多的一方,只是sql条数的问题 ;
    
    
    ·多对多:如果需要显示多方的数据,则需要多表查询;
    
    
    ·查询的时候,如果不要求显示多的一方,则直接单表查询出少的一方;
    
    
    ·如果明确需要一并显示多的一方,则继续查询,查询的逻辑,就写在查询之前类的dao里面;
    
    
        比如:老师与学生 ;在查询老师的时候,如果需要需要显示老师对应的学生,则继续在老师的Dao里面继续写逻辑 ;
    
    
    ·插入:
    
        ·一对多:可以在少的一方的dao层插入,也可以在多方dao层导入 ;
    
    
        ·多对多:一般写在少的一方的dao层里面,更新关系表,也写在这,减少代码量。
    
    
    
    
    
    ---------------------------------------------------------------------------------
    |                                                                            |
    |  备注:对于设计到多个表,我也不太清楚dao层是如如何设计的;2018年6月14日23:02:22  |  
    |                                                                            |
    ---------------------------------------------------------------------------------
    

    多对多表设计语句(学生老师)

    // 学生表
      create table student
      (
         id int ,
         name varchar(10)
      );
    
     // 老师表
      create table teacher
      (
          id int,
          name varchar(10),
          money float
      ) ;
    
     // 中间表,设置了级联
      create table teacher_student
      (
          teacher_id int,
          student_id int,
          constraint teacher_id_FK foreign key(teacher_id) references teacher(id) on delete cascade,
          constraint student_id_FK foreign key(student_id) references student(id) on delete cascade
      );
  • 相关阅读:
    ATS缓存数据结构
    Akamai CDN
    spring中的设计模式
    深入解析spring中用到的九种设计模式
    24种设计模式的通俗理解
    JDK中所包含的设计模式
    JDK源码中使用的设计模式
    算法-索引
    JAVA REENTRANTLOCK、SEMAPHORE 的实现与 AQS 框架
    扒一扒ReentrantLock以及AQS实现原理
  • 原文地址:https://www.cnblogs.com/young-youth/p/11665696.html
Copyright © 2020-2023  润新知