搭建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();
} }
2.1工廠模式(SqlSessionFactory)
工廠模式的原理如下圖:
2.2 代理模式(MapperProxyFactory)
代理模式分爲靜態和動態代理。靜態代理,我們通常都很熟悉。有一個寫好的代理類,實現與要代理的類的一個共同的接口,目的是爲了約束也爲了安全。具體不再多說。
這裏主要想說的是關於動態代理。我們知道靜態代理若想代理多個類,實現擴展功能,那麼它必須具有多個代理類分別取代理不同的實現類。這樣做的後果是造成太多的代碼冗餘。那麼我們會思考如果做,才能既滿足需求,
又沒有太多的冗餘代碼呢?——————動態代理。通過前面的課程我們已經學過了基於 JDK 的動態代理實現方式,今天我們就會使用 JDK 動態代理方式來編寫 MapperProxyFactory 類。
動態代理模型圖:
2.3構建者模式(SqlSessionFactoryBuilder)
具體設計模式的模型圖如下:
從圖中我們可以看出,創建者模式由四部分組成。
抽象創建者角色:給出一個抽象接口,以規範產品對象的各個組成成分的建造。一般而言,此接口獨立於應用程序的商業邏輯。模式中直接創建產品對象的是具體創建者角色。具體創建者必須實現這個接口的兩種方法:一是建造方法,比如圖中的 buildPart1 和 buildPart2 方法;另一種是結果返回方法,即圖中的 getProduct 方法。一般來說,產品所包含的零件數目與建造方法的數目相符。換言之,有多少零件,就有多少相應的建造方法。
具體創建者角色:他們在應用程序中負責創建產品的實例。這個角色要完成的任務包括:
- 實現抽象創建者所聲明的抽象方法,給出一步一步的完成產品創建實例的操作。
- 在創建完成後,提供產品的實例。
導演者角色:這個類調用具體創建者角色以創建產品對象。但是導演者並沒有產品類的具體知識,真正擁有產
品類的具體知識的是具體創建者角色。
產品角色:產品便是建造中的複雜對象。一般說來,一個系統中會有多於一個的產品類,而且這些產品類並不
一定有共同的接口,而完全可以使不相關聯的
三.實現原理
四.補充
明確:在實際開發中,都是越簡單越好,所以都是採用不寫dao實現類的方式,不管使用XML還是註解配置,但是Mybatis是支持寫dao實現類的
mybatis在使用代理dao的方式實現查時做什麼事呢?只有兩件事:
第一:創建代理對象
第二:在代理對象中調用selectList
END!!! 如果這篇文章對你有用的話不勝感激!!!