@[TOC]Mybatis入门案例的设计模式分析
源码展示
MybatisTest.java
public class MybatisTest {
public static void main(String[] args)throws Exception{
//1
InputStream inputStream = Resources.getResourceAsStream("SqlMpConfig.xml");
//2
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory sessionFactory = builder.build(inputStream);
//3
SqlSession session = sessionFactory.openSession();
//4
IUserDao userDao = session.getMapper(IUserDao.class);
//5
for (User user:userDao.findAll()) {
System.out.println(user);
}
// 6
session.close();
inputStream.close();
}
1.读取配置文件
InputStream inputStream = Resources.getResourceAsStream("SqlMpConfig.xml");
获取文件(xml)通常不使用绝对路径:d:/xxx/xxx.xml 和 相对路径:src/java/main/xxx.xml,而是使用这两种
a.使用类加载:它只能读取类路径的配置文件(本次就是类加载器)
b.使用ServletContext对象的getRealPath()
2.创建SqlSessionFactory工厂
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory sessionFactory = builder.build(inputStream);
第一句:通过new 创建 SqlSessionFactoryBuilder 构建者对象(builder)
第二句:通过构建者(builder)直接调用方法拿到对象(factory)–>使用了构建者模式:把对象的 创建细节隐藏,使用者直接调用方法即可拿到对象
3. 使用工厂生成SqlSession对象
SqlSession session = sessionFactory.openSession();
生成SqlSession使用了工厂模式:解耦(降低类之间的依赖关系)。不用每次new 都需要部署
4.使用SqlSession创建Dao接口的代理对象
IUserDao userDao = session.getMapper(IUserDao.class);
创建Dao接口实现类使用了代理者模式:不修改源码的基础上对已有方法增强。
5.使用代理对象(userDao)执行dao接口方法(findAll)
for (User user:userDao.findAll()) {
System.out.println(user);
}
6.释放资源
session.close();
inputStream.close();