Mybatis工作原理 喜欢ヅ旅行 2022-05-24 08:13 243阅读 0赞 mybatis运行原理图: ![70][] mybatis运行流程: public SqlSession getSession() throws IOException { /** * 1、根据xml配置文件(全局配置文件),创建一个sqlSessionFactory对象 */ String resource = "src/main/resources/mybatis-config.xml"; Reader reader = Resources.getResourceAsReader(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);① //2、获取sqlSession实例,能直接执行已经映射的sql语句 SqlSession sqlSession = sqlSessionFactory.openSession();② return sqlSession; } @Test public void test1() throws IOException { //获取sqlSession对象 SqlSession sqlSession = getSession(); try { //获取接口的实现类 //为接口创建一个代理对象,代理对象执行下面的操作 EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);③ Employee employee = mapper.getEmployeeById(1);④ System.out.println(employee); } finally { //关闭sqlSession对象 sqlSession.close(); } } 1、首先根据全局配置文件创建SqlSessionFactory对象 2、通过SqlSessionFactory获得SqlSession对象 3、获取接口的代理对象(MapperProxy) 4、执行增删改方法 接下来探究每一处都做了些什么 一、根据配置文件创建SqlSessionFactory ![70 1][] 其中的Configuration包含了所有配置文件的详细信息 总结:把配置文件的信息解析保存在Configuration对象中,返回了包含Configuration的DefaultSqlSession对象。 二、openSesion获取SqlSession对象 ![70 2][] 返回SqlSession的实现类DefaultSqlSession,里面包含了Executor和Configuration,Executor在这一步会被创建。 三、getMapper获取到接口的代理对象 ![70 3][] getMapper使用了MapperProxyFactory创建了一个MapperProxy的代理对象,包代理对象中包含了 DefaultSqlSession(Executor) 四、查询的实现(增删改查的实现) ![70 4][] 流程总结: ![70 5][] ##### 大总结: ##### 1、根据配置文件( 全局的和sql映射文件)初始化Configuration对象 2、创建一个DefaultSqlSession对象,它里面包含Configuration以及Executor(根据全局配置文件中的defaultExecutorType创建出对应的Executor) 3、DefaultSqlSession.getMapper( )拿 到mapper接口对应的MapperProxy 4、MapperProxy里面有( DefaultSqlSession) 5、执行增删改查方法: 1)、调用DefaultSqlSession的增删改查(Executor) 2)、会创建一个StatementHandler对象( 同时也会创建出ParameterHandler和ResultSetHandler) 3)、调用StatementHandler预编译参数以及设置参数值,使用ParameterHandler来给sql设置参数 4)、调用StatementHandler的增删改查方法 5)、ResultSetHandler封装结果 [70]: /images/20220524/010afde677d8465bbc8d8b6bc605e653.png [70 1]: /images/20220524/18ce81b7454340ab8012c0b57ea7ebeb.png [70 2]: /images/20220524/2f112e8701884cb485546accf531f64b.png [70 3]: /images/20220524/ae38c065ce25412c97982ca5172fdfa1.png [70 4]: /images/20220524/ee6ef1efef554efe9c05af2f72f8a56a.png [70 5]: /images/20220524/c1cb253fac134729ad9ca5deb08f1a54.png
还没有评论,来说两句吧...