MyBatis表設計
阿新 • • 發佈:2020-08-14
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 referencest_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 joint_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以學生表為主,關聯關係表和課程表