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以学生表为主,关联关系表和课程表
原文地址:https://www.cnblogs.com/lhl0131/p/13476438.html