【mybatis】關於mybatis框架的設計模式說明

 mybatis框架執行過程中對應的設計模式

這是一個@TestmybatisTest(),一個完整的通過mybatis框架從數據庫中獲取數據放到List<User>並打印輸出的demo。

    @Test
    public void mybatisTest() throws IOException {
        // 1.讀取配置文件    
        InputStream inputStream = Resources.getResourceAsStream("MyBatisConfg.xml");
        // 2.創建SQLSessionFactory工廠
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        SqlSessionFactory factory = builder.build(inputStream);
        // 3.使用工廠生產SQLSession對象
        SqlSession session = factory.openSession();
        // 4.使用sqlsession創建Dao接口(Mapper)的代理對象
        IUserMapper userMapper = session.getMapper(IUserMapper.class);
        // 5.使用代理對象執行方法
        List<User> users = userMapper.findAll();
        for (User user : users) {
            System.out.println(user);
        }
        // 6.釋放資源
        session.close();
        inputStream.close();
    }

(1)讀取配置文件

InputStream inputStream = Resources.getResourceAsStream("MyBatisConfg.xml");

#-> 關於讀取配置文件的傳統方式,(現在開發中一般都不用)
絕對路徑:E:\IdeaProjects\MyBatis\mybatis_01\src\main\resources\MyBatisConfg.xml
相對路徑:src\main\resources\MyBatisConfg.xml
#-> 開發中採取的方式是
第一個:使用類加載器,它只能讀取類路徑的配置文件
第二個:使用ServletContext對象的getRealPath() 

(2)創建SqlSessionFactory工廠

SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(inputStream);

創建SqlSessionFactory工廠mybatis使用了[構建者模式],builder就是構建者。
構建者模式-優點:把對象的創建細節隱藏,讓使用者直接調用方法即可拿到對象。 

(3)使用工廠生產SqlSession對象

SqlSession session = factory.openSession();

生產SqlSession使用了[工廠模式]。
工廠模式-優點:解耦——降低類之間的依賴關係。 

(4)使用sqlsession創建Dao接口(Mapper)的代理對象

 IUserMapper userMapper = session.getMapper(IUserMapper.class);

創建Dao接口實現類使用了[代理模式]。
代理模式-優點:不修改源碼的基礎上對已有方法增強。 

完整的MyBatisTest()

package com.yy.test;

import com.yy.dao.IUserMapper;
import com.yy.domain.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class MyBatisTest {

    @Test
    public void mybatisTest() throws IOException {
        // 1.讀取配置文件
        /* #-> 關於讀取配置文件的傳統方式,開發中一般都不用
        * 絕對路徑:E:\IdeaProjects\MyBatis\mybatis_01\src\main\resources\MyBatisConfg.xml
        * 相對路徑:src\main\resources\MyBatisConfg.xml
        * #-> 開發中採取的方式是
        * 第一個:使用類加載器,它只能讀取類路徑的配置文件
        * 第二個:使用ServletContext對象的getRealPath()
        * */
        InputStream inputStream = Resources.getResourceAsStream("MyBatisConfg.xml");
        // 2.創建SQLSessionFactory工廠
        /* 創建工廠mybatis使用了[構建者模式],builder就是構建者。
        *  構建者模式-優點:把對象的創建細節隱藏,讓使用者直接調用方法即可拿到對象 */
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        SqlSessionFactory factory = builder.build(inputStream);
        // 3.使用工廠生產SQLSession對象
        /* 生產SqlSession使用了工廠模式,
        *  工廠模式-優點:解耦——降低類之間的依賴關係 */
        SqlSession session = factory.openSession();
        // 4.使用sqlsession創建Dao接口(Mapper)的代理對象
        /* 創建Dao接口實現類使用了[代理模式]
        *  代理模式-優點:不修改源碼的基礎上對已有方法增強 */
        IUserMapper userMapper = session.getMapper(IUserMapper.class);
        // 5.使用代理對象執行方法
        List<User> users = userMapper.findAll();
        for (User user : users) {
            System.out.println(user);
        }
        // 6.釋放資源
        session.close();
        inputStream.close();
    }
}

 

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