• MyBatis表设计


    MyBatis 一对多设计

    1.表设计 

    员工(n)和部门(1)表
    
    设计1 和 n的表关系:
        将外键添加在n的一方
    --## 部门表
    create table t_dept(
        id varchar2(36) primary key,
        name varchar2(50)
    );
    
    --## 员工表
    create table t_emp(
        id varchar2(36) primary key,
        name varchar2(50),
        age number(3),
        salary number(10,2),
        dept_id references t_dept(id)
    );
    重点:必须先添加没有外键的数据(部门),然后再添加存在外键的数据(员工)

     2.实体设计

    1.在实体的添加关系属性,用来表示实体之间的关系(对应表数据的关系)
    2.在N的一方添加1的一个关系属性
    3.在1的一方添加N的list集合关系属性
    
    public class Emp {
      //主属性
      private String id;
      //一般属性
      private String name;
      private Integer age;
      private Double salary;
      //关系属性 一个部门信息
      private Dept dept;
    }
    
    public class Dept {
      private String id;
      private String name;
      //关系属性 员工信息
      private List<Emp> emps;
    }

    3. DAO(使用MyBatis查询两张表)

    需求1:根据员工工号查询该员工信息(1对1
    
    DAO接口
        Emp selectById(String id);
    
    Mapper文件
    
    1.SQL(必须使用表链接)
        select e.id,e.name,e.age,e.salary,d.id as did, d.name as dname
        from
           t_emp e left join t_dept d on e.dept_id = d.id
        where e.id = '5';
    
    2.参数
    3.使用ResultMap映射成实体对象association(1对1)
        <!-- 关系属性  是1的时候使用 -->
            <association property="关系属性名dept" javaType="关系属性的类型com.lhl.demo3.Dept">
                <id property="id" column="did"/>
                <result property="name" column="  dname"/>
            </association>
    需求2:根据id查询部门信息,和内部的员工信息(1对多
    
    DAO接口设计
        Dept selectById(String id);
    
    Mapper文件中
        1.SQL设计(使用表链接)
            select d.id, d.name, e.id as eid, e.name as ename, e.age, e.salary           
            from
                  t_dept d left join t_emp e on d.id = e.dept_id
            where d.id = #{id}
        2.参数绑定
        3.collection关系映射(1对多)
            <!-- 关系属性 :list集合-->
            <collection property="集合关系属性名emps" ofType="关系属性对象单个类型com.lhl.demo3.Emp">
                <!-- 主属性 -->
                <id property="id" column="eid"/>
                <!-- 一般属性 -->
                <result property="name" column="ename"/>
                <result property="age" column="age"/>
                <result property="salary" column="salary"/>
            </collection>

    1对1设计

    1.表设计

    1.添加外键 从业务分析角度,后添加的数据对应的表 该表叫做子表(副表),添加外键

    2.外键列约束 unique 唯一,不能重复

    2.实体设计

    互相保留彼此的一个关系属性

    3.DAO设计

    映射结果使用
    <association></association>

    多对多设计

    1.库表设计

    创建第三张关系表关联起来
    --学生表
    create table t_student(
           id varchar2(36) primary key,
           name varchar2(50),
           age number(3),
           mobile varchar2(11)
    );
    --课程表
    create table t_course(
           id varchar2(36) primary key,
           name varchar2(50)
    );
    --选课表
    create table t_stu_course(
         sid references t_student(id),
         cid references t_course(id),
         primary key(sid,cid)--联合主键   特点是非空并且联合唯一
    );  
    
    注意:
        如果产品要求一个学生选一个课,只能选择一次
        可以使关系表中,联合两个外键作为主键

    2.实体设计

    互相保留对方的一个集合属性
    //学生实体
    public class Student{
        //主属性
        private String id;
        //一般属性
        private String name;
        private Integer age;
        private String moblie;
        //关系属性
        private List<Course> courses;
    }
    //课程实体
    public class Course {
        //主属性
        private String id;
        //一般属性
        private String name;
        //关系属性
        private List<Student> students;
    }

    3.DAO设计

    本质就是  1对n
    使用list集合关系属性   <collection>标签
    sql以学生表为主,关联关系表和课程表
  • 相关阅读:
    csr_matrix参数解析
    SQL删除重复数据(根据多个字段),pandas的nan存入数据库报错
    XGBoost参数中文翻译以及参数调优
    pandas.DataFrame.quantile
    pandas.DataFrame.rank
    JOIN子句
    ORDER BY子句
    WHERE子句
    SELECT语句
    数据分析-基础
  • 原文地址:https://www.cnblogs.com/lhl0131/p/13476438.html
Copyright © 2020-2023  润新知