關於案例中核心dao的解釋

不少小夥伴不太理解核心dao,說這是幹什麼的,接下來我將一一爲你們解答:html

1.說到核心dao不得不說到單表操做,單表操做顧名思義是對單張數據庫表的CRUD操做,實際狀況中咱們追求將表與表的關係映射到對象與對象的關係,例若有兩張表分別是學生和老師表,java

咱們知道一個學生可能會有多個老師教學,那麼一個老師也會教不少學生,這是一個多對多的關係,在數據庫中表示:sql

student=(id,s_name,...);//學生表
teacher=(id,t_name,...);//老師表
student_teacher_rel=(s_id,t_id);//學生老師關係表

對於多對多關係的兩張表須要有第三張表來維護關係,第三張表中字段分別是其餘兩張表的id數據庫

public class Student{
  private Integer id;
  private String s_name;
  ...
  private List<Teacher> teachers;

  getter和setter省略          
}

public class Teacher {
  private Integer id;
  private String t_name;
  ...
  private List<Student> students;

  getter和setter省略 
}

2.爲了表示一個學生有多名老師教學,一個老師給多名學生上課的這種多對多關係,咱們須要經過比較複雜的查詢和幾乎噁心的封裝來表示對象之間的關係,儘管mybaits有配置能夠表示這種關係,可是在更爲複雜的對象關係中,你的配置就會極爲複雜且容易出錯在你不精通sql和mybatis的狀況下,特別是不使用orm框架的時候,裸寫jdbc會崩潰。mybatis

3.因此,能夠將爲每張表創建實體,包括關係表,將多表的查詢拆成一個個單表查詢,這樣作雖然可能增長了數據庫的壓力(一條多表鏈接/子查詢語句變成多條單表的簡單查詢),代碼的行數上會增多,可是邏輯上會變得異常清晰,由於每張表對應一個類,每一個字段對應一個屬性,因此能夠爲其高度封裝。app

4.由於是單表操做,數據庫表和java類,表字段和類屬性真正意義上作到了一一對應,因此能夠抽離出一個公共的泛型dao來爲全部dao提供CRUD操做。框架

5.全部單表的CRUD操做能夠描述爲insert(T t)增長一條數據、delete(int id)刪除一條數據、update(T t)修改一條數據、getOne(int id)得到一條數據、getOne(T t)得到多條數據,而後根據對象屬性值制定動態sql,如案例一 https://www.cnblogs.com/xiaogblog/p/11052544.html 中SqlFactory,又如案例二 https://www.cnblogs.com/xiaogblog/p/11062916.html 中mapper.xml配置的動態sql語句。spa

6.若是表名=類名,列名=屬性名,在經過必定規則將列類型轉換成屬性類型,則獲取數據庫鏈接後能夠經過io操做直接生成Entity、Dao、DaoImpl等,並繼承核心dao,那麼項目一建立就直接寫service和controller,是否是很嗨皮。code

7.mybatis中的generator就是經過這種思路來生成entity、mapper和mpaper.xml的。orm

相關文章
相關標籤/搜索