12. 关于Mybatis执行流程的理解
-
粗略理解
SqlSessionFactoryBuilder
—>SqlSessionFactory
—>SqlSession
—>Mapper映射器
—>操作数据库
SqlSessionFactoryBuilder
读取mybatis的核心配置文件生成SqlSessionFactory
SqlSessionFactory
(看它的名字是一个工厂,工厂就是拿来生成对象的)生成SqlSession
SqlSession
包含了所有对数据库执行的sql命令的方法,还可以通过SqlSession
拿到映射器来操作数据库
-
进一步理解
-
SqlSessionFactoryBuilder
SqlSessionFactoryBuilder
的作用是读取核心配置文件生成SqlSessionFactory
对象生成
SqlSessionFactory
之后,它就没什么用了,所以它生命周期只存在局部String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
-
SqlSessionFactory
SqlSessionFactory
可以生成操作数据库的SqlSession
对象它就像一个连接池,管理池子内的连接Connection(也就是
SqlSession
),所以它的生命周期也应该(像连接池一样)是全局的创建多个
SqlSessionFactory
就像创建多个连接池一样,会浪费资源,所以希望SqlSessionFactory
是单例的sqlSessionFactory.openSession() //拿到SqlSession对象
-
SqlSession
SqlSesion
包含对数据库操作的Sql指令不仅可以直接对数据库操作还可以拿到映射器(我们自己写的映射接口sql)来对数据库进行操作
//拿到映射器 UserMapper mapper = sqlSession.getMapper(UserMapper.class); //对数据库进行操作 User user = mapper.getUserById(5); //注意关闭 sqlSession.close();
注意:它像数据库连接对象(Connection)一样,使用完之后要关闭,不然会一直耗资源
因此,
SqlSession
作用在方法中,类似对数据库的请求后要关闭,不然会一直耗资源
-