mybatis框架執行過程中對應的設計模式
這是一個@Test類mybatisTest(),一個完整的通過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();
}
}