/**
* SqlSessionFactory, SqlSession, 映射器:都是接口。不让我们直接new对象,目的就是为了解耦
* 由Mybatis帮我们生成这些接口的实现类对象,如果将来要升级,只要mybaits的代码做修改即可,我们的代码不需要修改
*
* Mybatis涉及的设计模式,常见:
* 构造者模式:把一个对象的复杂构造过程隐藏起来,根据配置文件定制生成需要的对象
* 工厂模式:用于批量生产对象,目的是解耦==>Spring框架
* 代理模式:当不能、或不方便直接操作某一对象时,就可以通过代理对象间接操作
*
*
*/
public class MybatisTest {
@Test
public void testStart() throws IOException {
//1.加载全局配置文件,得到InputStream
InputStream is = Resources.getResourceAsStream("SqlMapConfig.xml");
//2.创建SqlSessionFactory:
// 构造者模式:把一个对象的复杂构造过程隐藏起来,我们就可以很方便的根据配置文件,定制生成我们需要的对象
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
//3.通过工厂生产一个SqlSession(提供了操作数据库的方法)
// 工厂模式:用于批量生产对象,目的是解耦
SqlSession session = factory.openSession();
//4.由session帮我们生成一个映射器接口的实现类(底层动态代理)
// 代理模式:当我们不能直接操作某一对象时,可以通过代理对象间接操作
UserDao dao = session.getMapper(UserDao.class);
//操作数据库:Mybatis会根据 接口全限定类名 和 调用的方法名,去对应的映射文件里,查找对应的sql语句,然后执行sql语句
List<User> userList = dao.queryAll();
for (User user : userList) {
System.out.println(user);
}
//5.释放资源
session.close();
is.close();
}
}