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();
}
}