1. 程式人生 > 實用技巧 >MyBatis表設計

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以學生表為主,關聯關係表和課程表