搭建Mybatis注意事項和實現原理,你真的看懂了嗎?


在這裏插入圖片描述

承接上文,這是對上文搭建時的一些注意事項,以及實現原理分析

一. 搭建Mybatis環境注意事項

  • 第一個:創建IUserDao.xml和IUserDao.java名稱時是爲了和我們之前的知識保持一致,在Mybatis中把持久層的操作接口名和映射文件也叫作Mapper,所以IuserDao和IUserMapper是一樣的
  • 第二個:idea創建目錄時,它和包是不一樣的,包在創建時:com.zzd.dao是三級結構,目錄在創建時:com.zzd.dao是一級結構
  • 第三個: mybatis 的映射配置文件位置必須和dao接口的包結構一樣
  • 第四個:映射配置文件的mapper標籤namespace屬性的取值必須是dao接口的全限定類名。
  • 第五個:映射配置文件的操作配置,id屬性取值必須是dao接口的方法
    當我們遵循了第三四點時,我們在開發中無需再寫dao的實現類。

二.涉及到的設計模式

測試類

/**
* 
* <p>Title: MybatisTest</p>
* <p>Description: 測試 mybatis 的環境</p>
* <p>Company: http://www.itheima.com/ </p>
*/
public class MybatisTest {
public static void main(String[] args)throws Exception {
    //1.讀取配置文件
InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
//2.創建 SqlSessionFactory 的構建者對象
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
//3.使用構建者創建工廠對象 SqlSessionFactory
SqlSessionFactory factory = builder.build(in);
//4.使用 SqlSessionFactory 生產 SqlSession 對象
SqlSession session = factory.openSession();
//5.使用 SqlSession 創建 dao 接口的代理對象
IUserDao userDao = session.getMapper(IUserDao.class);
//6.使用代理對象執行查詢所有方法
List<User> users = userDao.findAll();
for(User user : users) {
System.out.println(user);
}
//7.釋放資源
session.close();
in.close();
} }

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-OdQEjfMb-1593776803081)(C:\Users\張振東\AppData\Roaming\Typora\typora-user-images\image-20200629111308301.png)]

2.1工廠模式(SqlSessionFactory)

在這裏插入圖片描述

工廠模式的原理如下圖:
在這裏插入圖片描述

2.2 代理模式(MapperProxyFactory)

在這裏插入圖片描述

代理模式分爲靜態和動態代理。靜態代理,我們通常都很熟悉。有一個寫好的代理類,實現與要代理的類的一個共同的接口,目的是爲了約束也爲了安全。具體不再多說。
這裏主要想說的是關於動態代理。我們知道靜態代理若想代理多個類,實現擴展功能,那麼它必須具有多個代理類分別取代理不同的實現類。這樣做的後果是造成太多的代碼冗餘。那麼我們會思考如果做,才能既滿足需求,
又沒有太多的冗餘代碼呢?——————動態代理。通過前面的課程我們已經學過了基於 JDK 的動態代理實現方式,今天我們就會使用 JDK 動態代理方式來編寫 MapperProxyFactory 類。
動態代理模型圖:
在這裏插入圖片描述

2.3構建者模式(SqlSessionFactoryBuilder)

在這裏插入圖片描述

具體設計模式的模型圖如下:
在這裏插入圖片描述

從圖中我們可以看出,創建者模式由四部分組成。
抽象創建者角色:給出一個抽象接口,以規範產品對象的各個組成成分的建造。一般而言,此接口獨立於應用程序的商業邏輯。模式中直接創建產品對象的是具體創建者角色。具體創建者必須實現這個接口的兩種方法:一是建造方法,比如圖中的 buildPart1 和 buildPart2 方法;另一種是結果返回方法,即圖中的 getProduct 方法。一般來說,產品所包含的零件數目與建造方法的數目相符。換言之,有多少零件,就有多少相應的建造方法。
具體創建者角色:他們在應用程序中負責創建產品的實例。這個角色要完成的任務包括:

  1. 實現抽象創建者所聲明的抽象方法,給出一步一步的完成產品創建實例的操作。
  2. 在創建完成後,提供產品的實例。

導演者角色:這個類調用具體創建者角色以創建產品對象。但是導演者並沒有產品類的具體知識,真正擁有產
品類的具體知識的是具體創建者角色。
產品角色:產品便是建造中的複雜對象。一般說來,一個系統中會有多於一個的產品類,而且這些產品類並不
一定有共同的接口,而完全可以使不相關聯的

三.實現原理

在這裏插入圖片描述

四.補充

明確:在實際開發中,都是越簡單越好,所以都是採用不寫dao實現類的方式,不管使用XML還是註解配置,但是Mybatis是支持寫dao實現類的

mybatis在使用代理dao的方式實現查時做什麼事呢?只有兩件事:
第一:創建代理對象
第二:在代理對象中調用selectList
在這裏插入圖片描述
END!!! 如果這篇文章對你有用的話不勝感激!!!
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章